gpt4 book ai didi

java - 如何将参数传递给 android junit 测试(参数化测试)

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:58:53 28 4
gpt4 key购买 nike

我正在使用命令行或 eclipse 运行我的 android junit 测试,具体取决于我是处于开发模式还是处于设备测试。

Java 应用程序有一个 Main (String[] args) 方法,可以很容易地向它传递一个参数(在运行配置部分的 Arguments 选项卡中使用 eclipse,或者通过命令行)

对于 android junit 测试,它是不同的,没有 Main 方法,也没有我可以设置一些参数的地方。

我读过这里和那里的解决方案是使用属性文件。那是唯一的方法吗?如果您有一个快速简单的示例,我们将不胜感激。

谢谢

>>> Edit <<<

我正在使用 Robotium,junit 扩展了 ActivityInstrumentationTestCase2请参阅下面的非常基本的 junit 测试:

import android.test.ActivityInstrumentationTestCase2;
import android.util.Log;

import com.jayway.android.robotium.solo.Solo;

public class Test_arg extends ActivityInstrumentationTestCase2 {
private static final String TARGET_PACKAGE_ID = "com.myapp.test";
private static final String LAUNCHER_ACTIVITY_FULL_CLASSNAME = "com.myapp";
private static Class launcherActivityClass;
private Solo solo;

static {
try {
launcherActivityClass = Class.forName(LAUNCHER_ACTIVITY_FULL_CLASSNAME);
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
}
}

public Test_arg() throws ClassNotFoundException {
super(TARGET_PACKAGE_ID, launcherActivityClass);

}

@Override
protected void setUp() throws Exception {
solo = new Solo(getInstrumentation(), getActivity());
}

@Override
public void tearDown() throws Exception {
try {
solo.finishOpenedActivities();
solo.finalize();
} catch (Throwable e) {
e.printStackTrace();
}
super.tearDown();
}

public void test_01() throws InterruptedException {
Log.i("TEST", "test");
}
}

和安卓 list

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.myapp.test"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="5" />

<instrumentation
android:name="android.test.InstrumentationTestRunner"
android:targetPackage="com.slacker.radio" android:functionalTest="true"/>

<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<uses-library android:name="android.test.runner" />
</application>
</manifest>

最佳答案

您可以扩展 InstrumentationTestRunner 并在 onCreate 中获取参数:

public class MyTestRunner extends InstrumentationTestRunner {

private static final String TAG = null;
private String mArgument;

/* (non-Javadoc)
* @see android.test.InstrumentationTestRunner#onCreate(android.os.Bundle)
*/
@Override
public void onCreate(Bundle arguments) {
super.onCreate(arguments);

if (arguments != null) {
mArgument = arguments.getString("myarg");
}
}

public String getArgument() {
return mArgument;
}

}

将检测添加到 AndroidManifest.xml,在您的情况下:

<instrumentation        
android:name="com.example.my.test.MyTestRunner"
android:targetPackage="com.slacker.radio" android:functionalTest="true"/>

在您的Instrumentation(即ActivityInstrumentationTestCase2)测试中,您可以执行如下操作:

public void testSomething() {
MyTestRunner myTestRunner = (MyTestRunner)getInstrumentation();
Log.d(TAG, "argument=" + myTestRunner.getArgument());
}

并获取您可以在命令行中指定的参数

$ adb shell am instrument -e myarg MYARG com.example.my.test/.MyTestRunner -w

关于java - 如何将参数传递给 android junit 测试(参数化测试),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14820175/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com