我有一个InstrumentedTest
url
我想使用@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)
但是如何将方法参数作为参数传递给在命令提示符下运行的命令?
答案 0 :(得分:1)
Ref:How to pass an argument to an 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
编辑2
这听起来像参数化的JUnit Test用例。
请查看简短的教程here-请注意,您将需要使用JUnit4,但我不确定Android的测试框架已准备就绪。
也就是说,JUnit4向后兼容JUnit3,因此从理论上讲,可以在android测试用例运行器下使用JUnit4批注,并带有一些构建路径。
答案 1 :(得分:1)
一个人可以使用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
一个人可以同时运行整个测试组(例如EspressoTest
):
./gradlew app:connectedAndroidTest -Pandroid.testInstrumentationRunnerArguments.class=com.example.android.testing.blueprint.ui.espresso.EspressoTest