【问题标题】:Unable to resolve activity for Intent robolectric ActivityScenarioRule无法解析 Intent robolectric ActivityScenarioRule 的活动
【发布时间】:2019-04-11 14:55:26
【问题描述】:

在我的机器人电动测试中,我写了一个

  @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)

【问题讨论】:

    标签: android unit-testing robolectric scenarios


    【解决方案1】:

    我刚遇到同样的问题,发现我忘了包含

    android {
        ...
        testOptions {
            unitTests {
                includeAndroidResources = true
            }
        }
    }
    

    在我的一个新项目的 build.gradle 中。

    结果是 Robolectric 无法使用清单。

    (见http://robolectric.org/getting-started/)

    【讨论】:

    • 非常感谢!我正在疯狂地阅读与 Robolectric 错误链接的问题日志,但这就是这么简单
    【解决方案2】:

    Robolectric 现在需要在清单中定义活动。来自release notes的已知问题部分:

    现在必须在清单中明确声明活动(就像 普通Android的案例);但是,Android Gradle 插件没有 目前正在合并一个测试清单。

    这对库来说是有问题的,因为清单中的任何内容都将合并到库使用者的清单中。有一种解决方法,但它需要创建一个新的 Gradle 模块。希望 AGP 错误将很快得到修复。同时,我希望使用已弃用的Robolectric.setupActivity() 方法。

    【讨论】:

    • setupActivity 在 AndroidX 测试中做了什么?
    • @IgorGanapolsky setupActivity 和以前一样。但是,我最终没有使用它。如果可能,最好使用ActivityScenario,因为它是新支持的 API。见robolectric.org/androidx_test
    • 更多信息可以在这里找到github.com/robolectric/robolectric/pull/4736 - 正如你所说,我希望他们能尽快解决这个问题,因为这就是我所说的“解决方法”。没有任何意义。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-13
    相关资源
    最近更新 更多