有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何将参数传递给安卓 junit测试(参数化测试)

我正在使用命令行或eclipse运行我的安卓 junit测试,这取决于我是在开发模式下还是在设备测试中

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

对于安卓 junit测试则不同,它没有主方法,也没有我可以设置一些参数的地方

我已经读过这里和那里的解决方案将是使用属性文件。这是唯一的办法吗? 如果你有一个简单快捷的例子,我将不胜感激

谢谢

>>> Edit <<<

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

import 安卓.test.ActivityInstrumentationTestCase2;
import 安卓.util.Log;

import com.jayway.安卓.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");   
    }    
}

还有安卓清单

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

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

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

共 (2) 个答案

  1. # 1 楼答案

    您可以扩展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"/>
    

    在你的测试中(即^{)你可以这样做:

    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
    
  2. # 2 楼答案

    在扩展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,set

    <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