8

開発モードかデバイス テストかに応じて、コマンド ラインまたは Eclipse を使用して Android Junit テストを実行しています。

Java アプリケーションには Main (String[] args) メソッドがあり、簡単に引数を渡すことができます (実行構成セクションの [引数] タブで 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");   
    }    
}

そしてアンドロイドマニフェスト

<?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>
4

2 に答える 2

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"/>

インストルメンテーション(つまり)テストでは、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
于 2013-02-11T22:18:04.483 に答える