2013-12-10 1 views
1

В моем приложении (проект студии на основе градиента), мне нужно создать файл с другим именем при работе в тесте. Например, в производстве я хотел бы использовать имя com.myapp.file и при запуске под тестированием com.myapp.file. .Как узнать, работает ли приложение Android под управлением InstrumentationTestRunner?

То, что я хотел сделать, это сделать:

String packageName = getApplicationContext().getPackageName(); MyFile file = new MyFile(packageName);

Я надеялся, что PACKAGENAME будет автоматически отличаться при работе в тесте (./gradlew connectedInstrumentTest) по сравнению с нормально. Я проверил свой манифест, и он показывает, что мой тестовый манифест имеет имя пакета, заканчивающееся .test, но, похоже, оно не передается этому приложению при запуске.

Есть ли способ либо:

1) Обновить мои Gradle или файлы проекта использовать другое имя пакета при выполнении тестов

-или-

2) Есть ли способ программно сказать, чем работает мое приложение?

+0

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

+0

Да, это работает. Это решение, которое я сейчас использую. Я разместил этот вопрос, пытаясь найти альтернативу. Причина, по которой я хочу альтернативу, это то, что мне пришлось изменить публичный конструктор моего класса, чтобы принять имя файла, которое я бы предпочел не делать. Я хотел бы скрыть эту деталь реализации, если это имеет смысл. –

+0

Я могу это понять. К сожалению, я не думаю, что есть способ сказать, что вы используете тест, но я не на 100%, потому что это вопрос, который я не стану отвечать. Тем не менее, я бы подумал о том, чтобы создать имя файла, которое вы захватите из файла общих предпочтений, и укажите имя в файле в тестовой настройке. Вместо того, чтобы принимать его в качестве параметра, вытащите имя из предпочтения. Просто убедитесь, что имя изменилось в режиме срыва –

ответ

0

Фактически, поскольку Android по сути использует тестирование JUnit с тестовыми участниками, я думаю, что могу с уверенностью сказать, что Android не дает вам возможности окончательно сказать, что вы работаете в тестовом режиме. Я бы посоветовал это так. Ответьте здесь: How can I find out if code is running inside a JUnit test or not?

Я бы определенно согласился с тем, что это плохая практика работает по-другому, но если вы просто хотите сохранить в другом файле при тестировании, это не кажется слишком несправедливым. Я бы использовал общие настройки или глобальную переменную, установленную в классе Application, чтобы проверить, выполняется ли при тестировании. Поскольку, как правило, плохой идеей ссылаться на тестирование в вашем производственном коде, хотя, я думаю, что просто наличие имени файла, определенного где-то, и его изменение в настройке и разрыве было бы правильным подходом здесь.