10

我已经实现了一个 Instrumentation 和一个 AndroidTestCase。

对于我的测试,我需要连接到外部 WIFI 设备。我希望测试人员能够指定一个 SSID 供测试使用。

给出命令行(adb shell am instrument ...)来运行测试不是问题,但我怎样才能将SSID添加到命令行并在代码中提取呢?

4

3 回答 3

24

要扩展selalerer答案,可以使用通过 Gradle 指定的参数启动检测测试:

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

您可以使用以下方法检索检测参数:

InstrumentationRegistry.getArguments().getString("exampleArgument") // returns "hello"
于 2017-09-12T18:46:06.217 回答
12

找到了解决方案。

我让我的测试运行程序继承自 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' 参数并在我的 AndroidTestCase 中使用 BAR。

于 2013-03-04T09:36:50.760 回答
0

这听起来像参数化 JUnit 测试用例

查看这里的简短教程- 请注意,您将需要使用 JUnit4,我不确定 Android 的测试框架是否已为此做好准备。

也就是说,JUnit4 向后兼容 JUnit3,因此理论上可以在 android 测试用例运行器下使用 JUnit4 注释,并带有一些构建路径错误。

于 2013-03-04T09:53:13.890 回答