2013-03-03 3 views
2

Я внедрил Instrumentation и AndroidTestCase.Как передать аргумент AndroidTestCase?

Для моих тестов мне нужно подключиться к внешнему устройству WIFI. Я хочу, чтобы тестеры могли указать SSID для теста.

Предоставление командной строки (инструмент adb shell am ...) для запуска теста не является проблемой, но как я могу добавить SSID в командную строку и извлечь ее в код?

ответ

7

Найдено решение.

я сделал тест-бегун наследует от InstrumentationTestRunner и взял дополнительные данные в OnCreate():

public class MyTestRunner extends InstrumentationTestRunner { 

    public static String BAR; 

    public void onCreate(Bundle arguments) { 

     if (null != arguments) {  
      BAR = (String) arguments.get("foo")); 
     }  
     super.onCreate(arguments); 
    } 
} 

Я добавил к Android.mk:

LOCAL_JAVA_LIBRARIES := android.test.runner 

И AndroidManifest.xml:

<instrumentation 
    android:name="com.example.MyTestRunner" 
    android:targetPackage="com.example" /> 

Ран его с помощью этой командной строки:

adb shell am instrument -w -e foo the_value_of_bar com.example/com.example.MyTestRunner 

Это бег как шарм. Мне удалось получить параметр «foo» из командной строки и использовать BAR в AndroidTestCase.

+0

Как вы справляетесь значения с пробелами? – htellez

+0

@htellez Это не имеет ничего общего с Android или adb. Каждая оболочка имеет свои способы обработки значений с пробелами. Если вы используете Bash, просто обведите значение с помощью одной кавычки. Например. ''значение с пробелами''. – selalerer

+0

Я обрабатывал их так же, как «double \ quotes \ and \ slashes» (или «double \ quotes \ and \ slashes») , и он отлично работает, но кажется, что он переполнен кавычками и экранирует пробелы. Удаление кавычек или удаление экранирования приведет к катастрофе. Мне было интересно, есть ли более чистый подход. – htellez

0

Это звучит как Параметрированный тест JUnit прецедент.

Ознакомьтесь с кратким учебным пособием here - обратите внимание, что вам нужно будет использовать JUnit4, и я не уверен, что платформа тестирования Android готова к этому.

Это говорит о том, что JUnit4 обратно совместим с JUnit3, поэтому в теории можно будет использовать аннотации JUnit4 под бегуном для сценариев android с небольшим количеством путаницы для построения пути.

+0

Мой вопрос был очень специфичным для Android. Я не вижу, как использование Parameterized JUnit может помочь мне дать тестерам или автоматическое тестирование возможности передать этот аргумент моему тесту. – selalerer

+0

Ну, это дает вам механизм для передачи параметра в единичный тест.Реализация метода @Parameters заключается в том, как ваши пользователи смогут пройти через аргумент. Здесь вы можете предоставить синтаксический анализатор для чтения SSID из файла конфигурации XML для тестового пользователя, в котором перечислены их SSID, чтобы проверить или получить доступ к базе данных, чтобы отобразить все SSID, которые должны быть протестированы. – OceanLife

+0

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

1

Для расширения selalerer «s answer, тест (ы) приборы могут быть запущены с параметрами, указанными через Gradle:

./gradlew -Pandroid.testInstrumentationRunnerArguments.exampleArgument=hello connectedAndroidTest 

Вы можете получить аргументы измерительных приборов с помощью:

InstrumentationRegistry.getArguments().getString("exampleArgument") // returns "hello" 
Смежные вопросы