Robolectric 2 - 使用 Intent 创建测试活动

10

我正在使用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();
    }
}
如何在创建新意图时传递上下文。 我遵循了这个问题中的示例。
那里@David说,
“...我需要提供一个上下文和Activity类,以便将其发送到”。
我该如何做?
注意:请不要将其标记为上面链接问题的重复。由于我无法在那里添加评论,所以我正在提出一个新问题。

可能是robolectric 2 - create activity with intent的重复问题。 - tir38
6个回答

9

试试这个

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

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

这将使用所需的意图启动您的活动。

谢谢@user2483079,但是这个解决方案出现了错误:testSetBasketForExistingSeatWhoHasDeferredPurchases(com.miairline.activities.MiAirlineActivityTest) Time elapsed: 1.375 sec <<< ERROR! java.lang.NullPointerException at com.miairline.activities.MiAirlineActivity.onCreate(MiAirlineActivity.java:540)这是代码调用getIntent()并且intent为空的地方。 - vikas
在我的情况下,我只调用了 .get 然后它就起作用了。谢谢 @user2483079 - Dheeraj D

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

请查看Robolectric文档,点击这里

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

1

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


2
请格式化您的代码并添加解释,以帮助解释此答案与其他答案的优点。 - OhBeWise

0

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

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接