使用ActivityUnitTestCase进行活动单元测试



我正在尝试使用ActivityUnitTestCase为活动方法编写单元测试。但在调用startActivity()时,总是会出现空指针异常。下面是我的代码。

我进行了调试,发现它总是返回空getInstrumentation().getTargetContext()。但我真的不明白这里发生了什么。

代码

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);
}
}

我在这里做错了什么?

还有什么需要我设置的吗?

我之前为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用于非常基本的测试。它几乎没用,我也不在乎用什么。

ActivityInstrumentationTestCase2允许使用该活动,如果我没记错的话,它是用getActivity()启动的。

如果你想具体查看上下文,那么它可能看起来像:

scoreBoardActivity.getApplicationContext()

但您可以使用scoreBoardActivity。

还要注意,测试是按字母顺序排列的,因此您的testActivityNotNull()可能落后于其他测试,如testAcorn或testAbat。

相关内容

  • 没有找到相关文章

最新更新