java - Robolectric 测试从小部件启动的 Activity

标签 java android unit-testing robolectric

我有一个简单的小部件,它由一个图像和一个按钮组成,该按钮应该启动一个 Activity 。我正在尝试编写一个 Robolectric 测试来测试单击按钮时是否启动了 Activity

我有两个问题,首先我在尝试单击按钮时收到 NPE:

java.lang.NullPointerException: can't get a shadow for null
   at org.robolectric.bytecode.ShadowWrangler.shadowOf(ShadowWrangler.java:415)
   at org.robolectric.Robolectric.shadowOf_(Robolectric.java:1020)
   at org.robolectric.Robolectric.shadowOf(Robolectric.java:671)
   at org.robolectric.shadows.ShadowIntent.fillIn(ShadowIntent.java:454)
   at android.content.Intent.fillIn(Intent.java)
   at org.robolectric.shadows.ShadowPendingIntent.send(ShadowPendingIntent.java:48)
   at android.app.PendingIntent.send(PendingIntent.java)
   at org.robolectric.shadows.ShadowRemoteViews$2$1.onClick(ShadowRemoteViews.java:61)
   at android.view.View.performClick(View.java:4084)

此外,我不确定如何获取对通过单击按钮启动的 Activity 的引用。

测试代码:

@Test
public void buttonShouldLaunchActivity() throws Exception {
    int widgetId = shadowAppWidgetManager.createWidget(HelloWidgetProvider.class, R.layout.hellowidget_layout);
    View helloWidgetView = shadowAppWidgetManager.getViewFor(widgetId);
    Button quickButton = (Button) helloWidgetView.findViewById(R.id.quick_add_button);
    quickButton.performClick();

    // Not sure how to get a handle of the activity started from a widget, this is what I have for an activity launched from another activity.
    Intent intent = Robolectric.shadowOf(activity).peekNextStartedActivity();
    assertEquals(QuickAddActivity.class.getCanonicalName(), intent.getComponent().getClassName());
}

如有任何想法,我们将不胜感激,实际的小部件正在运行( Activity 已启动),但我只想对其进行测试。

最佳答案

peekNextStartedActivity() 实际上是 ShadowApplication 上的一个方法。 ShadowContextWrapper 上的方法(这是 ShadowActivity 隐式使用的方法)实际上只是一个调用影子应用程序的包装器。

所以你应该能够做这样的事情,以获得你需要的东西:

Robolectric.getShadowApplication().peekNextStartedActivity()

关于java - Robolectric 测试从小部件启动的 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25963852/

相关文章:

java - 我有一个 JSON 响应,但我一直坚持使用它

Android SOAP示例程序报错

Java - 平衡 BinarySearchTree 的 JUnit 测试

java - 当带有数据的 POST 请求到达 Java Servlet 时读取 URL 参数

java - spring文件夹内容资源注入(inject)到bean中

Java ArrayList包含方法

java - 方法 Activity.setContentView(int) 不适用

android - Proguard:忽略包不会阻止警告

c++ - 带有单元测试的示例 C++ 项目

swift - 将 Cuckoo 与 Swift 一起使用,为什么调用 `stub` 会提示来自 GeneratedMocks 的类不符合 Mock 协议(protocol)?