I\'ve implemented an Instrumentation and an AndroidTestCase.
For my tests I need to connect to an external WIFI device. I want the testers to be able to specify an S
To expand on selalerer's answer, instrumentation test(s) can be started with arguments specified via Gradle:
./gradlew -Pandroid.testInstrumentationRunnerArguments.exampleArgument=hello connectedAndroidTest
You can retrieve instrumentation arguments using:
InstrumentationRegistry.getArguments().getString("exampleArgument") // returns "hello"
This sounds like the Parameterised JUnit Test use-case.
Check out the brief tutorial here - note that you will need to be using JUnit4 and I'm not sure Android's testing framework is ready for that.
That said, JUnit4 is backward compatible to JUnit3 so in-theory it'll be possible to use JUnit4 annotations under the android test case runner with a bit of build path tomfoolery.
Found a solution.
I made my test-runner inherit from InstrumentationTestRunner and took the extra data in onCreate():
public class MyTestRunner extends InstrumentationTestRunner {
public static String BAR;
public void onCreate(Bundle arguments) {
if (null != arguments) {
BAR = (String) arguments.get("foo"));
}
super.onCreate(arguments);
}
}
I added to Android.mk:
LOCAL_JAVA_LIBRARIES := android.test.runner
And to AndroidManifest.xml:
<instrumentation
android:name="com.example.MyTestRunner"
android:targetPackage="com.example" />
Ran it using this command line:
adb shell am instrument -w -e foo the_value_of_bar com.example/com.example.MyTestRunner
I was able to get the 'foo' parameter from the command line and use BAR in my AndroidTestCase.