Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/207.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android onCreate之前的模拟活动类成员_Android_Unit Testing_Mockito_Robolectric - Fatal编程技术网

Android onCreate之前的模拟活动类成员

Android 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

我正在尝试使用robolectric 3.3.2测试一项活动。 希望模拟和活动的成员初始化,因为直接调用会导致NPE

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。等等,你意识到了吗?