我正在测试一个销毁/重启序列,以确保计数器保留其原始值(在重启之前错误地递增)。当我手动测试时,我修复了它并且它工作正常。但单元测试总是通过,无论我是否包含修复程序。正如您在下面的代码中看到的,我得到计数器值,然后重新启动,再次获取计数器值并进行比较。可能是什么问题呢?
public void testNumCorrectEqualAfterDestroy() {
mCorrect = (TextView) mActivity.findViewById(R.id.correct);
int before = Integer.parseInt(mCorrect.getText().toString());
mActivity.finish();
mActivity = this.getActivity();
mCorrect = (TextView) mActivity.findViewById(R.id.correct);
int after = Integer.parseInt(mCorrect.getText().toString());
Assert.assertEquals(before, after);
}
答案 0 :(得分:1)
我认为finish()不会通过“适当”状态循环你的活动。我之前测试过这个生命周期案例的方式是这样的:
...
//TODO: do not use getActivity, instead use the startActivity() method
//and pass a value in the Bundle parameter
...
getInstrumentation().callActivityOnStart(mActivity);
getInstrumentation().callActivityOnResume(mActivity);
//TODO: asssert that the value is the expected one (based on what you fed in the bundle)
Bundle newBundle = new Bundle();
getInstrumentation().callActivityOnSaveInstanceState(mActivity, newBundle);
getInstrumentation().callActivityOnPause(mActivity);
getInstrumentation().callActivityOnStop(mActivity);
getInstrumentation().callActivityOnDestroy(mActivity);
//initialize activity with the saved bundle
getInstrumentation().callActivityOnCreate(mActivity, newBundle);
getInstrumentation().callActivityOnResume(mActivity);
//TODO: assert that the value is the expected one
答案 1 :(得分:0)
ActivityInstrumentationTestCase2.getActivity()
在您第一次调用它时启动Activity,然后它只会在测试用例的每个后续调用中返回该Activity 。因此,您仍在查看已完成的活动。
完成第一个活动后,您需要从测试中开始一个新活动。例如,您可以使用InstrumentationTestCase.launchActivity()
。
作为另一个例子,我编写了一个测试,在ActivityA中按下一个按钮,启动ActivityB for-result;测试然后立即杀死ActivityA(通过方向更改,但finish()也可以工作),然后测试获取系统在ActivityB完成时创建并发送其结果的新ActivityA的句柄。有一个技巧是让测试添加一个Instrumentation.ActivityMonitor,然后让该监视器等待系统启动新的ActivityA并为测试提供一个句柄。