我正在尝试使用ActivityUnitTestCase为活动方法编写单元测试。但总是在调用startActivity()
时我得到空指针异常。以下是我的代码。
我调试了,发现这总是返回null getInstrumentation().getTargetContext()
。但我真的不明白这里发生了什么。
CODE
public class ScoreBoardActivityTest extends ActivityUnitTestCase<ScoreBoardActivity> {
public ScoreBoardActivity activity;
public ScoreBoardActivityTest() {
super(ScoreBoardActivity.class);
}
@Override
protected void setUp() throws Exception {
super.setUp();
startActivity(new Intent(getInstrumentation().getTargetContext(), ScoreBoardActivity.class), null, null);
activity = getActivity();
}
@Test
public void testActivityNotNull(){
Assert.assertNull(activity);
}
@Test
public void testBatsmanOneAddRunButtonClickUpdateTotalRuns(){
activity.onBatsmanOneAddRunClick(null);
Assert.assertEquals(activity.totalRuns, 1);
}
}
我在这里做错了什么?
我还有什么需要设置的吗?
答案 0 :(得分:0)
我之前为ActivityUnitTestCase做了一个注释:
// This will always be null with extends ActivityUnitTestCase<>
// home = getActivity();
你可以通过这样做来获得上下文:
public class ScoreBoardActivityTest extends ActivityInstrumentationTestCase2<ScoreBoardActivity> {
private ScoreBoardActivity scoreBoardActivity;
public ScoreBoardActivityTest() {
super(ScoreBoardActivity.class);
}
// Called before every test case method
@Override
protected void setUp() throws Exception {
super.setUp();
// Use here to start the activity anew before each test
// Use in test methods should re-start the activity each time called or bring it back after
// finishing or intents
scoreBoardActivity = getActivity();
}
另一个注意事项是ActivityUnitTestCase用于非常基本的测试。它几乎无用的imo而不是我关心的东西。
ActivityInstrumentationTestCase2允许使用活动,如果我没记错的话,以getActivity()开头。
如果您想要专门查看上下文,那么它可能看起来像:
scoreBoardActivity.getApplicationContext()
但你可以使用scoreBoardActivity。
另请注意,测试是按字母顺序排列的,因此testActivityNotNull()可能会支持其他测试,例如testAcorn或testAbat。