Запуск инструментированного теста с аргументами с использованием командной строки - PullRequest
0 голосов
/ 24 сентября 2018

У меня есть InstrumentedTest

@RunWith(AndroidJUnit4.class)
public class ExampleInstrumentedTest {
    @Test
    public void useAppContext(String groupName) {
Context appContext = InstrumentationRegistry.getTargetContext();
        UiDevice device=UiDevice.getInstance(getInstrumentation());
...
...
  }
}

И я хочу выполнить его с помощью команды adb shell.Но я должен передать значение параметра groupName для метода useAppContext(String groupName)

Я использовал команду

adb shell am instrument -w -r   -e debug false -e class 'com.<package_name>.ExampleInstrumentedTest' com.<package_name>.test/android.support.test.runner.AndroidJUnitRunner  

Но как я могу передать параметры метода в качестве аргументов выполняемой команде?через командную строку?

Ответы [ 2 ]

0 голосов
/ 04 октября 2018

можно передавать аргументы с помощью adb am instrument :

adb push ./app/build/outputs/apk/debug/com.<package_name>-debug.apk /data/local/tmp/com.<package_name>.debug
adb shell pm install -t -r "/data/local/tmp/com.<package_name>.debug"
adb push ./app/build/outputs/apk/androidTest/debug/com.<package_name>-debug-androidTest.apk /data/local/tmp/com.<package_name>.debug.test
adb shell pm install -t -r "/data/local/tmp/com.<package_name>.debug.test"
adb shell am instrument -w -r -e debug true -e class 'com.<package_name>.ExampleInstrumentedTest' com.<package_name>.debug.test/android.support.test.runner.AndroidJUnitRunner
Waiting for application to come online: com.<package_name>.debug.test | com.<package_name>.debug
Connecting to com.<package_name>.debug

, возможно, лучше использовать TestRule для макетирования ввода параметров.

можно также передать android.testInstrumentationRunnerArguments.class:

./gradlew app:connectedAndroidTest -P android.testInstrumentationRunnerArguments.class=com.<package_name>.ExampleInstrumentedTest#someMethodToTest

или передать дополнительные аргументы *

-Pandroid.testInstrumentationRunnerArguments.argument1=make_test_fail

, а можно выполнить целые группы тестов (например, *).1017 *) так:

./gradlew app:connectedAndroidTest -Pandroid.testInstrumentationRunnerArguments.class=com.example.android.testing.blueprint.ui.espresso.EspressoTest

см. План тестирования Android .

0 голосов
/ 28 сентября 2018

Ссылка: Как передать аргумент в AndroidTestCase?

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

Edit 2

Это похоже на сценарий использования Parameterised JUnit Test.

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

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

...