Можно ли определить действие внутри Android-теста и запустить тест против него?

Я пишу тесты для компонента в своем приложении для Android. Этот компонент использует действия для создания некоторых отчетов. Таким образом, мне нужна активность, чтобы протестировать компонент (уродливую архитектуру), и я подумал, что было бы легко создать фиктивную активность внутри тестового проекта, а не создавать тесты, унаследованные от ActivityInstrumentationTestCase2<TestActivity> , но по какой-то причине я всегда получаю java.lang.RuntimeException: Unable to resolve activity for: Intent { act=android.intent.action.MAIN flg=0x10000000 cmp=com.xxx/.Testctivity } исключение.

Тестовая активность добавляется в файл манифеста, и пакет кажется корректным.

Я попытался поместить его в пакет com.xxx (пакет приложения) и com.xxx.test, без везения. Но когда я переношу TestActivity в целевое приложение, все работает нормально. Поэтому я начал задаваться вопросом, в чем разница между тестовым проектом и моим приложением, и даже возможно иметь действия внутри тестовых проектов.

Да, это возможно, но не рекомендуется, как указано в официальном руководстве для разработчиков :

После создания тестового проекта вы заполняете его тестовым пакетом. Этот пакет не требует действия, хотя вы можете определить его, если хотите. Хотя ваш тестовый пакет может сочетать классы активности, классы тестов или обычные классы, ваш основной тестовый пример должен расширить один из классов тестовых случаев Android или классов JUnit, поскольку они обеспечивают лучшие возможности тестирования.

Для этого вам необходимо:

  1. Определите свою фиктивную активность в AndroidManifest.xml тестового проекта.
  2. Измените контрольную точку TargetPackage на себя в AndroidManifest.xml тестового проекта. (Класс Activity, который должен тестироваться, должен находиться под контрольной панелью TargetPackage).

Предположим, у меня есть тестовый проект. Com.example.test содержит два класса DummyActivity и DummyActivityTest, а затем, если вы хотите протестировать DummyActivity с помощью DummyActivityTest, вам нужно определить AndroidManifest.xml вашего тестового проекта следующим образом:

 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.test" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="10" /> <!-- targetPackage point to test project itself --> <instrumentation android:name="android.test.InstrumentationTestRunner" android:targetPackage="com.example.test" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <uses-library android:name="android.test.runner" /> <activity android:name=".DummyActivity" android:label="@string/app_name" > </activity> </application> 

Проект и деятельность по тестированию могут сосуществовать вместе, поставить название целевого пакета в качестве имени пакета тестового проекта