我正在尝试使用命令行运行android instrumentation Junit测试。我正在使用以下命令,它正在启动测试。
adb shell am instrument -w com.android.foo/android.test.InstrumentationTestRunner
我的android项目包有以下java源文件(按字母顺序排列)
com.android.foo
ActivityTest
ContactsTest
LaunchTest
SendTest
当我使用上述命令运行测试时,测试首先开始执行ActivityTest,依此类推。这不是我想要的,我希望它首先执行LaunchTest,然后是ContactTest,SendTest和ActivityTest。我尝试使用
adb shell am instrument -w -e class com.android.foo.LaunchTest,com.android.foo.ContactTest com.android.foo/android.test.InstrumentationTestRunner
但它给我一个错误可能是因为我没有在我的代码中使用TestCase类,而是我的LaunchTest和其他人扩展了ActivityInstrumentationTestCase2。
感谢任何帮助。
答案 0 :(得分:6)
我终于使用以下命令开始工作了:
adb shell am instrument -e class com.android.foo.LaunchTest -w com.android.foo/android.test.InstrumentationTestRunner
答案 1 :(得分:0)
如果测试的执行顺序很重要,那么您的测试很脆弱,应该重构。这意味着它们相互依赖,理想情况下,测试是独立的。通常大多数测试是如此独立和细粒度,我们称之为单元测试。
打破这种依赖关系的一个常见开端是在TestCase中使用setup()
和teardown()
方法。在这里,您可以准备测试以运行和清除测试可能发生的任何更改。
话虽这么说,android.test.InstrumentationTestRunner
没有选项来修改你的测试套件。但是,这可以通过两种方式完成。
1)您可以创建自己的android.test.InstrumentationTestRunner
实现,它可以执行一些特殊的排序。这将为您提供最大的灵活性,但可能需要更多时间。
2)am instrument
可以将类名作为参数,这样您就可以按顺序运行测试但运行多个命令(可能在bash脚本中组合)。这是通过添加参数“-e class [classname of test]”来完成的。
此外,您运行测试的方式有误:
adb shell am instrument -w -e class com.android.foo.LaunchTest,com.android.foo.ContactTest com.android.foo/android.test.InstrumentationTestRunner
尝试运行两个类。为此,您需要将其更改为:
adb shell am instrument -w -e class com.android.foo.LaunchTest com.android.foo/android.test.InstrumentationTestRunner
adb shell am instrument -w -e class com.android.foo.ContactTest com.android.foo/android.test.InstrumentationTestRunner