Nano Hash - криптовалюты, майнинг, программирование

Как запустить инструментальные тесты для библиотеки Android в студии Android?

Документация (http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Testing-Android-Libraries) говорит, что приложение будет автоматически сгенерировано и запущено с библиотекой в ​​качестве зависимости. , но он не говорит вам, как будут называться действия приложения-оболочки, что означает, что вы не можете протестировать его с помощью классов инструментовки (например, http://developer.android.com/reference/android/test/ActivityTestCase.html). Поскольку им нужно знать рассматриваемую активность, чтобы инициализировать суперконструктор.

Кто-нибудь знает, как правильно проводить такое тестирование в студии Android с помощью Gradle?


Ответы:


1

Хорошо, у меня есть одно возможное решение. Является ли это «правильным» подходом, я посмотрю, что скажут люди.

Теоретически ничто не мешает мне создать класс 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
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..