yit*_*al9 6 android unit-testing mocking mockito robolectric
我有一个活动
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
}
}
Run Code Online (Sandbox Code Playgroud)
我想用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
}
}
Run Code Online (Sandbox Code Playgroud)
是否可以通过创建活动来使用已经模拟的方法?
编辑
我试过了
@Before
public void setUp() {
ActivityController<MyActivity> co = Robolectric.buildActivity(MyActivity.class);
mActivity = spy(co.get());
doReturn(2).when(mActivity).getSomeInt();
co.create();
}
Run Code Online (Sandbox Code Playgroud)
但我似乎,这onCreate并没有被称为mActivity
assertEquals(2, mActivity.i); //给出结果:
java.lang.AssertionError:
Expected :2
Actual :0
Run Code Online (Sandbox Code Playgroud)
感谢Eugen的考虑,它不起作用,因为create调用控制器,操作时没有被监视的活动
我认为这是不可能的。我尝试在测试中创建 Activity,监视它,然后使用该间谍创建一个控制器,但我无法让它工作,所以我无法想象你如何做到这一点。
话虽如此,这并不意味着您的根本问题没有解决方案,只是监视活动不是解决问题的方法。我建议您提出第二个问题,具体解释您想要实现的目标(例如在测试中模拟网络组件),您可能会得到一些替代解决方案来帮助您实现目标。
| 归档时间: |
|
| 查看次数: |
1932 次 |
| 最近记录: |