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

Это описание того, как начать работу с тестированием на Android, выглядит непоследовательным:

http://developer.android.com/guide/topics/testing/testing_android.html

В нем говорится:

Проект тестирования – это каталог или проект Eclipse, в котором вы создаете исходный код, файл манифеста и другие файлы для тестового пакета. Android SDK содержит инструменты для Eclipse с ADT и для командной строки, которые создают и обновляют тестовые проекты для вас. Инструменты создают каталоги, которые вы используете для исходного кода и ресурсов, и файл манифеста для тестового пакета.

Однако тогда он говорит:

Вы можете создать тестовый проект в любом месте вашей файловой системы, но лучше всего добавить тестовый проект, чтобы его корневой каталог тестировал / находился на том же уровне, что и каталог src / основного проекта. Это поможет вам найти тесты, связанные с приложением.

Затем он показывает структуру проекта, где все ваши тесты находятся под вашим основным проектом, а не отдельным проектом. Тем не менее, если вы используете плагин ADT, он создаст отдельный проект. Какая правильная или лучшая практика – отдельный проект для модульных тестов или один и тот же проект?

Возможно, можно создать модульные тесты в отдельном проекте, но так, как я это сделал, просто используется другой пакет.

Это позволяет вам ссылаться на любые классы, которые вам могут понадобиться при создании полей assert.

То, как я это делаю, это пакет, называемый com..Data.Tests, и для определения моих тестов используйте следующее:

public class AddressValidationTest extends ActivityInstrumentationTestCase2<InitialActivity> 

Это позволяет сохранить все в рамках одного проекта.

Надеюсь это поможет!

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

EDIT2: вам не нужно больше одного манифеста.
Включите в манифест любые тестовые действия со следующим:

 <uses-library android:name="android.test.runner" /> <instrumentation android:label="All Tests" android:name="com.App.Data.Tests.MyInstrumentationTestRunner" android:targetPackage="com.App.UI" /> 

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

Мое мнение , да, это лучший подход
Если вы используете тот же проект, в вашем manifest появятся некоторые дополнительные коды, вам нужно добавить дополнительный класс в ваш src.
Хотя, если вы создадите отдельный проект, это не повлияет на наш основной код проекта. И по функциональности оба способа будут работать одинаково.
Так зачем же путаться 🙂

EDIT: для использования того же проекта вам необходимо добавить в файл манифеста следующее:

 <manifest> <!-- For doing JUnit test---> <instrumentation android:targetPackage="com.your.package.where.testclasses" android:name="android.test.InstrumentationTestRunner" /> <application ...> <activity..> <!-- For doing JUnit test --> <uses-library android:name="android.test.runner" /> </application> </manifest> 

По-моему, создание отдельного проекта для тестовых случаев – это хорошо. Особенно, если вашему проекту нужна более ранняя версия JRE. Для Android-проектов это может быть неприменимо, но для встроенных проектов Java, где ему нужны более старые JRE.

Поскольку для большинства тестовых платформ требуется, по меньшей мере, JDK 1.5 или выше, создание отдельных проектов для тестовых классов является единственным решением.