【问题标题】:Activity Unit testing using ActivityUnitTestCase使用 ActivityUnitTestCase 进行活动单元测试
【发布时间】:2016-01-11 23:14:23
【问题描述】:

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

我调试并发现它总是返回 null 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);
}
}

我在这里做错了什么?

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

【问题讨论】:

  • getInstrumentation().getTargetContext() 更改为getInstrumentation().getTargetContext().getApplicationContext();
  • @piotrek1543 感谢您的评论。但它不再工作了..

标签: android unit-testing junit activityunittestcase


【解决方案1】:

我之前为 ActivityUnitTestCase 做了一个注释:

// This will always be null with extends ActivityUnitTestCase<>
// home = getActivity();

您可以通过以下方式获得 [to] 上下文:

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。

【讨论】:

  • 感谢您的回答。我也试过这个。这个发生的奇怪事情是测试总是通过。你有什么想法吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多