6

我正在尝试使用命令行运行 android 仪器 Junit 测试。我正在使用以下命令,它正在启动测试。

adb shell am instrument -w com.android.foo/android.test.InstrumentationTestRunner

我的 android 项目包有以下 java 源文件(按字母顺序)

com.android.foo

活动测试

联系人测试

启动测试

发送测试

当我使用上述命令运行测试时,测试首先开始执行 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。

任何帮助表示赞赏。

4

2 回答 2

7

我终于使用以下命令让它工作:

adb shell am instrument -e class com.android.foo.LaunchTest -w com.android.foo/android.test.InstrumentationTestRunner
于 2011-10-27T20:05:28.493 回答
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
于 2011-10-26T02:57:04.573 回答