wie übergeben ein argument für ein android junit test (Parametrisierte tests)
Ich bin mit meinem android junit tests über die Kommandozeile oder eclipse je, wenn ich bin im dev-Modus oder im Gerät testen.
Einer java-Applikation hat eine Main (String[] args) - Methode, und es ist leicht, zu gehen ein argument, um es (entweder mit eclipse in der Argumente-Registerkarte in der run configuration Abschnitt, oder per Kommandozeile)
für ein android junit test es ist anders, es gibt keine Main-Methode, und es gibt nirgendwo ich kann einige Argumente.
Ich habe hier und da gelesen, eine Lösung wäre die Verwendung einer properties-Datei. Ist das die einzige Möglichkeit?
Wenn Sie ave ein schnelles und einfaches Beispiel, wäre es sehr geschätzt.
Dank
>>> Edit <<<
Ich bin mit Robotium, und die junit erweitert ActivityInstrumentationTestCase2
Sehen Sie unten die sehr einfache junit-test:
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");
}
}
und das android-manifest
<?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>
- ähnliche Fragen: stackoverflow.com/questions/683764/... stackoverflow.com/questions/2884163/...
- es ist nicht gut, practive Argumente übergeben, um die tests von der Kommandozeile aus. Was wollen Sie weitergeben? Warum nicht Sie erstellen unterschiedliche test-suites oder bauen Sie Argumente innerhalb tests.
- Ray, wie wissen in meiner Frage, ich bin mir bewusst, das system Eigenschaften Weg, ich bin gerade auf der Suche ein gerader Weg (wie command-argument). _ Leonidos. Ich verstehen, es ist nicht die best-practice-Argumente übergeben, die für unit-tests. In meinem Fall, einige änderungen der server-Seite, wo Sie die Schalter on und off Dinge. Meine tests ausführen von Befehlszeile automatisch, also nicht mit zu kompilieren, wieder die tests, wenn die server Sachen ändern speichern würde meine Zeit
- Wenn das Ziel ist die Unterstützung von parametrisierten Android-tests, in Betracht ziehen, Burst für diese.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erweitern zu können, InstrumentationTestRunner und die Argumente in onCreate:
Fügen Sie Instrumentierung um
AndroidManifest.xml
, in Ihrem Fall:und in Ihrem Instrumentation (ich.e
ActivityInstrumentationTestCase2
) tests, die Sie tun können, so etwas wie dieses:bekommen und die Argumente, die Sie können in der Befehlszeile angeben, wie
In der Setup-Funktion der Klasse, die Sie erweitert ActivityInstrumentationTestCase2, fügen Sie den folgenden code:
Verzeichnis-Struktur sollte:
Dann in der AndroidManifest.xml legen
Aufrufen, die oben genannten Paket mit der Befehlszeile: