Не удалось разрешить действие для намеренного робоэлектрического ActivityScenarioRule - PullRequest
1 голос
/ 11 апреля 2019

В своем тесте по робототехнике я написал

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

1 Ответ

1 голос
/ 23 мая 2019

Robolectric теперь требует, чтобы действия были определены в манифесте.Из раздела известных проблем примечаний к выпуску :

Действия теперь должны быть явно объявлены в манифесте (как в случае с обычным Android);однако плагин Android Gradle в настоящее время не объединяет тестовый манифест.

Это проблематично для библиотек, поскольку все, что помещено в манифест, будет объединено с манифестами потребителей библиотек.Существует обходной путь, но он требует создания нового модуля Gradle.Надеюсь, ошибка AGP будет исправлена ​​в ближайшее время.В то же время, я надеюсь использовать устаревший Robolectric.setupActivity() подход.

...