在我看来,用Robolectric的生命周期工具(从Robolectric.buildActivity()
开始)构建Activity单元测试和用Mockito间谍监视同一Activity是相互排斥的。
由于buildActivity()
控制Activity对象的构造,因此只能在调用buildActivity()
之后为Activity添加间谍。但是,在此之后添加间谍时,它无法正常工作。
在监视ActivityController
生命周期方法(如create()
、start()
和resume()
)的副作用时尤其如此。我假设这是因为ActivityController持有对“真实的”Activity对象的引用,而不是后来添加的spy。
那么,有没有什么方法可以监视一个正在使用Robolectric进行单元测试的Activity,以便在通过Robolectric的ActivityController
调用生命周期方法时,间谍可以正常工作?
3条答案
按热度按时间cuxqih211#
答案是使用反射来替换
ActivityController
中的“真实的”Activity
对象。字符串
我用
Robolectric
3.1测试了一下,没问题。b4qexyjb2#
至少对于Activity不是被测对象,而只是托管被测片段的虚拟Activity的情况,可以将mock注入测试Activity,该测试Activity可以通过片段和Activity之间的通信接口验证与Activity的交互(遵循http://developer.android.com/training/basics/fragments/communicating.html)。
0tdrvxhp3#
不反思。我想十年也不算晚吧?
字符串
ActivityController
说:强烈建议不要直接在测试中使用ActivityController。
但恕我直言,这比反思要少得多。