【发布时间】:2015-11-02 18:55:22
【问题描述】:
我有一个活动
public class MyActivity extends ActionBarActivity {
public int i;
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
i = getSomeInt();
}
protected int getSomeInt() {
return 1; // here can be an api-request
}
}
我想用 robolectric 3.0 和 mockito 对其进行测试。
但我需要模拟 getSomeInt() 方法。
@RunWith(RobolectricGradleTestRunner.class)
@Config(constants = BuildConfig.class)
public class MyActivityTest {
private MyActivity mActivity;
@Before
public void setUp() {
mActivity = spy(Robolectric.buildActivity(MyActivity.class).create().get());
doReturn(2).when(mActivity).getSomeInt(); //but it is already after onCreate!
}
@Test
public void testGetInt() {
assertEquals(2, mActivity.i); //error
}
}
是否可以通过创建活动来使用已经模拟的方法?
编辑
我试过了
@Before
public void setUp() {
ActivityController<MyActivity> co = Robolectric.buildActivity(MyActivity.class);
mActivity = spy(co.get());
doReturn(2).when(mActivity).getSomeInt();
co.create();
}
但我似乎,onCreate 没有被mActivity 调用
assertEquals(2, mActivity.i); //给出结果:
java.lang.AssertionError:
Expected :2
Actual :0
感谢 Eugen 的考虑,它不起作用,因为 create 调用控制器,该控制器使用未被监视的活动进行操作
【问题讨论】:
-
您是否考虑将
getsomeInt()呼叫转移到onResume?
标签: android unit-testing mocking mockito robolectric