无法解决Intent robolectric ActivityScenarioRule的活动。

10
在我的Robolectric测试中,我编写了一个<p>标签。
  @Rule
  public ActivityScenarioRule<AppCompatActivity> activityScenarioRule =
      new ActivityScenarioRule<>(AppCompatActivity.class);

  @Rule
  public ActivityScenarioRule<FragmentUtilActivity> activityScenarioRule2 =
      new ActivityScenarioRule<>(FragmentUtilActivity.class);

以及一个内部类:

  private static class FragmentUtilActivity extends FragmentActivity {
    public static int anchorId = 200;
    private StandaloneAccountMenuDialogFragment<FakeAccount> dialogFragment;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      LinearLayout view = new LinearLayout(this);
      view.setId(anchorId);
      setContentView(view);
    }
  }

但是当我运行代码时,它失败了。

第一条规则为什么有效,而第二条却无效?

Unable to resolve activity for Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.myComp..internal/.StandaloneAccountMenuDialogFragmentTest$FragmentUtilActivity } -- see https://github.com/robolectric/robolectric/pull/4736 for details
java.lang.RuntimeException: 
    at org.robolectric.android.fakes.RoboMonitoringInstrumentation.startActivitySyncInternal(RoboMonitoringInstrumentation.java:48)
    at org.robolectric.android.internal.LocalActivityInvoker.startActivity(LocalActivityInvoker.java:34)
    at androidx.test.core.app.ActivityScenario.launch(ActivityScenario.java:205)
    at androidx.test.core.app.ActivityScenario.launch(ActivityScenario.java:182)
    at androidx.test.ext.junit.rules.ActivityScenarioRule.lambda$new$0(ActivityScenarioRule.java:68)
    at androidx.test.ext.junit.rules.ActivityScenarioRule.before(ActivityScenarioRule.java:82)
    at org.junit.rules.ExternalResource$1.evaluate(ExternalResource.java:46)
    at org.junit.rules.RunRules.evaluate(RunRules.java:20)
    at org.robolectric.RobolectricTestRunner$HelperTestRunner$1.evaluate(RobolectricTestRunner.java:546)
    at org.robolectric.internal.SandboxTestRunner$2.lambda$evaluate$0(SandboxTestRunner.java:252)
    at org.robolectric.internal.bytecode.Sandbox.lambda$runOnMainThread$0(Sandbox.java:89)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)
3个回答

14
我刚遇到了同样的问题,意识到我忘记包含{{某些内容}}。
android {
    ...
    testOptions {
        unitTests {
            includeAndroidResources = true
        }
    }
}

在我的新项目的build.gradle文件中。
结果是manifest文件无法被Robolectric使用。
(参见http://robolectric.org/getting-started/)

非常感谢!我在阅读与Robolectric错误相关的问题日志时都快疯了,但事实上只是这么简单的一个问题。 - Adam Burley

5
罗博电力现在要求活动在清单文件中定义。从发布说明的已知问题部分中可以看到:

现在必须明确在清单文件中声明活动(如普通Android所需);然而,Android Gradle插件目前不会合并测试清单。

这对于库而言是有问题的,因为放入清单文件中的任何内容都将被合并到库的使用者的清单文件中。虽然有一种解决方法,但需要创建一个新的Gradle模块。希望AGP bug很快就能被修复。与此同时,我希望继续使用已弃用的Robolectric.setupActivity()方法。


在 AndroidX Test 中,setupActivity 函数是用来做什么的? - IgorGanapolsky
2
@IgorGanapolsky setupActivity 做了和以前一样的事情。但是,我最终没有使用它。如果可能的话,最好使用 ActivityScenario,因为它是新的支持 API。请参见 http://robolectric.org/androidx_test/。 - amram99
1
更多信息可以在这里找到 https://github.com/robolectric/robolectric/pull/4736 - 正如你所说,我希望他们能尽快修复这个问题,因为这真的是我所谓的“解决方法”。没有任何意义。 - Victor Oliveira

2

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