Android onCreate之前的模拟活动类成员
我正在尝试使用robolectric 3.3.2测试一项活动。 希望模拟和活动的成员初始化,因为直接调用会导致NPEAndroid onCreate之前的模拟活动类成员,android,unit-testing,mockito,robolectric,Android,Unit Testing,Mockito,Robolectric,我正在尝试使用robolectric 3.3.2测试一项活动。 希望模拟和活动的成员初始化,因为直接调用会导致NPE ActivityController<MyActivity> activityController = Robolectric.buildActivity(MyActivity.class); mTestActivity = activityController.get(); Mockito.when(mTestActivity.g
ActivityController<MyActivity> activityController =
Robolectric.buildActivity(MyActivity.class);
mTestActivity = activityController.get();
Mockito.when(mTestActivity.getCountry()).thenReturn("xxxx");
activityController.setup();
ActivityController ActivityController=
构建活动(MyActivity.class);
mTestActivity=activityController.get();
Mockito.when(mTestActivity.getCountry())。然后返回(“xxxx”);
activityController.setup();
已试用上述代码,但安装程序。((oncreate)忽略
getCountry方法并调用活动中的定义
有没有办法做到这一点?即使你使用spies(
@Spy
,Mockito.Spy()
),它也不会像这样工作
您应该使用存根:
public class MyActivityTest{
public static class StubMyActivity extends MyActivity {
Country getCountry() {
return someSpecialCountry;
}
}
@Before
public void setUp(){
ActivityController<StubMyActivity> activityController =
Robolectric.buildActivity(StubMyActivity.class);
mTestActivity = activityController.setup().get();
}
}
公共类MyActivityTest{
公共静态类StubMyActivity扩展了MyActivity{
Country getCountry(){
回到某个特殊的国家;
}
}
@以前
公共作废设置(){
ActivityController ActivityController=
Robolectric.buildActivity(StubMyActivity.class);
mTestActivity=activityController.setup().get();
}
}
即使您使用Spie(@Spy
,Mockito.Spy()
),它也不会像这样工作
您应该使用存根:
public class MyActivityTest{
public static class StubMyActivity extends MyActivity {
Country getCountry() {
return someSpecialCountry;
}
}
@Before
public void setUp(){
ActivityController<StubMyActivity> activityController =
Robolectric.buildActivity(StubMyActivity.class);
mTestActivity = activityController.setup().get();
}
}
公共类MyActivityTest{
公共静态类StubMyActivity扩展了MyActivity{
Country getCountry(){
回到某个特殊的国家;
}
}
@以前
公共作废设置(){
ActivityController ActivityController=
Robolectric.buildActivity(StubMyActivity.class);
mTestActivity=activityController.setup().get();
}
}
谢谢你,尤金。我尝试了上述解决方案。但是它找不到字符串资源。android.content.res.Resources$NotFoundException:字符串资源ID#0x7f0d0037。当我不使用Stubactivity时,不会出现此异常。您是否看到这里有问题?您是否在日志消息中看到类似“未找到清单航班”的内容?清单已就位。但我的代码引用了另一个包中的资源。我通过扩展RobolectricTesRunner并添加自定义路径来修复它。现在又出现了另一个问题“R包含最终字段,这些字段将由编译器内联,无法重新映射”,这在新版本的robolectric中发生,如3.2.1、3.3。等等。你知道吗?谢谢你,尤金。我尝试了上述解决方案。但是它找不到字符串资源。android.content.res.Resources$NotFoundException:字符串资源ID#0x7f0d0037。当我不使用Stubactivity时,不会出现此异常。您是否看到这里有问题?您是否在日志消息中看到类似“未找到清单航班”的内容?清单已就位。但我的代码引用了另一个包中的资源。我通过扩展RobolectricTesRunner并添加自定义路径来修复它。现在又出现了另一个问题“R包含最终字段,这些字段将由编译器内联,无法重新映射”,这在新版本的robolectric中发生,如3.2.1、3.3。等等,你意识到了吗?