我正在使用命令行或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");
}
}
和android清单
<?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>
答案 0 :(得分:14)
您可以扩展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
答案 1 :(得分:0)
在扩展ActivityInstrumentationTestCase2的类的Setup函数中,添加以下代码:
MyTestRunner myTestRunner = (MyTestRunner)getInstrumentation();
String argument = myTestRunner.getArgument();
solo = new Solo(myTestRunner, getActivity());
目录结构应该是:
src
package.x.y.z.test
MainTest.java
CustomInstrumentationRunner.java
然后在AndroidManifest.xml中设置
<manifest package="package.x.y.z" ...
<instrumentation
android:name="package.x.y.z.test.CustomInstrumentationRunner"
使用命令行调用上述包:
adb shell am instrumentation -w package.x.y.z/package.x.y.z.test.CustomInstrumentationRunner