在具有特定顺序的类的包上使用android检测运行Junit测试

时间:2011-10-25 23:42:42

标签: android junit robotium

我正在尝试使用命令行运行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。

感谢任何帮助。

2 个答案:

答案 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