robolectric 2 - 用意图创建被测试的活动

时间:2013-07-30 09:03:55

标签: android robolectric

我正在用Robolectric写单元测试。设置看起来像这样

@RunWith(RobolectricTestRunner.class)
public class MiAirlineActivityTest {
    @Before
    public void setUpFor() {
        Intent intent = new Intent(HOW_TO_PASS_CONTEXT_HERE, MiAirlineActivity.class);
        intent.putExtra(EMPLOYEEID_EXTRA, "username");

        miAirlineActivity = Robolectric.buildActivity(MiAirlineActivity.class)
                                .withIntent(intent).start().get();
    }
}

如何在创建新意图时传递上下文。 我按照this问题中的示例进行了操作。

@David说,

  

" ...我需要提供一个上下文以及它被发送到的活动的类"

我究竟能做到这一点?

注意:请勿将其标记为上述链接问题的副本。我问了一个新问题,因为我无法在那里添加评论。

6 个答案:

答案 0 :(得分:8)

试试这个

Intent intent = new Intent(Robolectric.getShadowApplication().getApplicationContext(),
                MiAirlineActivity.class);

答案 1 :(得分:2)

以意图

构建您的活动
Intent intent = new Intent(HOW_TO_PASS_CONTEXT_HERE,MiAirlineActivity.class);
intent.putExtra(EMPLOYEEID_EXTRA, "username");
iAirlineActivity = Robolectric.buildActivity(MiAirlineActivity.class).withIntent(intent).create().get();

查看roboelectric docs here

答案 2 :(得分:2)

我发布这个因为当我谷歌“android roboelectric 3 buildactivity intent”时,这个页面是最好的结果。

testImplementation "org.robolectric:robolectric:3.7.1"

withIntent()在robolectric 3中不再可用。

我使用了以下代码:

Intent intent = new Intent(HOW_TO_PASS_CONTEXT_HERE,MiAirlineActivity.class);
intent.putExtra(EMPLOYEEID_EXTRA, "username");
iAirlineActivity = Robolectric.buildActivity(MiAirlineActivity.class,intent).create().get();

答案 3 :(得分:1)

Intent intent = new Intent(ShadowApplication.getInstance()。getApplicationContext(),Activity.class);

答案 4 :(得分:0)

miAirlineActivity = Robolectric.buildActivity(MiAirlineActivity.class).create().get();
Intent intent = new Intent();
intent.putExtra(EMPLOYEEID_EXTRA, "username");
miAirlineActivity.setIntent(intent);
miAirlineActivity.onCreate(new Bundle());

这将以期望的意图启动您的活动

答案 5 :(得分:0)

无需使用构造函数创建上下文和目标Activity类。试试这个:

@Before
public void setUpFor() {
    Intent intent = new Intent();
    intent.putExtra(EMPLOYEEID_EXTRA, "username");

    miAirlineActivity = Robolectric.buildActivity(MiAirlineActivity.class)
                            .withIntent(intent).start().get();
}