Хорошо, у меня есть одно возможное решение. Является ли это «правильным» подходом, я посмотрю, что скажут люди.
Теоретически ничто не мешает мне создать класс TestActivity.java где-нибудь под
/src/androidTest/java/com....бананы/TestActivity.java
И это правда. Вы можете сослаться на это в потенциальном ActivityTest.java, находящемся под androidTest.
public class ActivityTest extends ActivityInstrumentationTestCase2<TestActivity> {
public ActivityTest() {
super(TestActivity.class);
}
...
Однако есть один сбой/загвоздка. ЕСЛИ TestActivity необходимо ссылаться на какие-либо строки/константы (eg. res/layout/activity_test.xml)
, они не могут быть ниже /src/androidTest/res/layout/
. Эта папка по необъяснимым причинам игнорируется во время сборки. Несмотря на то, что он указан как исходная папка res для сборки gradle (я проверил с помощью дампа gradle (println android.sourceSets.androidTest.dump())
, содержимое не было найдено при сборке и запуске тестов... и вы получаете:
Ресурс, соответствующий заданному имени, не найден...
Таким образом, это означает, что вы можете тестировать библиотеки с пользовательскими действиями по своему усмотрению, без необходимости запуска отдельного тестового приложения, но вы получите дополнительный беспорядок в папке res для библиотеки. (хотя их можно вручную исключить из окончательного файла .aar).
Было бы неплохо, если бы кто-нибудь мог объяснить эту странную ошибку или доказать, что я ошибаюсь, но в остальном это работает. :)
Изменить/обновить
Одна вещь, которую нужно добавить, это убедиться, что AndroidManifest.xml под /src/androidTest
содержит что-то вроде:
<application>
<activity
android:name=".TestActivity"
android:label="@string/title_activity_test" >
</activity>
</application>
getActivity() в ActivityInstrumentationTestCase2 выдаст ошибку, если его не указать: java.lang.RuntimeException: Unable to resolve activity for: Intent { act=android.intent.action.MAIN ...
26.06.2015