如何将参数传递给AndroidTestCase?

时间:2013-03-03 17:54:00

标签: android instrumentation

我已经实现了Instrumentation和AndroidTestCase。

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

给命令行(adb shell am instrument ...)运行测试不是问题,但是如何将SSID添加到命令行并在代码中提取它?

3 个答案:

答案 0 :(得分:9)

找到解决方案。

我让我的测试运行器继承自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。

答案 1 :(得分:7)

要展开selalerer&#39; answer,可以使用Gradle指定的参数启动检测测试:

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

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

InstrumentationRegistry.getArguments().getString("exampleArgument") // returns "hello"

答案 2 :(得分:1)

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

查看简要教程here - 请注意,您需要使用JUnit4,我不确定Android的测试框架是否已准备就绪。

也就是说,JUnit4向后兼容JUnit3所以在理论上它可以在android测试用例运行器下使用JUnit4注释和一些构建路径tomfoolery。