安卓测试 testPreconditions

5
在Android开发中,我看到testPreconditions()方法应该在所有测试之前启动。但在我的应用测试中,它像普通测试一样运行。有什么问题吗?
以下是android开发者关于testPreconditions()的描述: “预条件测试检查执行其他测试前的初始应用程序条件。它类似于setUp(),但开销较小,因为它只运行一次。”

根据Android的教程(http://developer.android.com/tools/testing/activity_test.html#AddPreConditionsTest),它是testPreConditions,其中C是大写的。 - nbilal
大小写不重要。无论是testPreconditions()还是testPreConditions(),都不能保证以任何给定的顺序运行。 - Bill Mote
3个回答

6

实际上,testPreconditions()只是另一个单元测试。以下是来自Diego Torres Milano所著的《Android应用测试指南》一书的引言:

testPreconditions方法 该方法用于检查运行我们的测试所需的一些初始条件。尽管它的名称如此,但不能保证该测试在其他测试之前运行。然而,将所有先决条件测试都收集在这个自定义名称下是一个好习惯。”

Milano, Diego Torres (2011-06-23). Android Application Testing Guide (p. 76). Packt Publishing. Kindle Edition.


2
为什么这被认为是一种良好的实践,即使不能保证在其他测试之前运行?如果这是在setup()之后第一个测试运行,我可以理解。但事实上,这并没有什么区别,因为在先决条件测试运行之前,我可能会失败所有测试。五只猴子?http://johnstepper.com/2013/10/26/the-five-monkeys-experiment-with-a-new-lesson/ - Bill Mote
@BillMote 这只是一种惯例,可以帮助您更快地排除测试失败的问题。如果测试前提条件与该测试类中的多个测试一起失败,则您可以忽略其他测试失败并专注于为什么未满足前提条件。请参见http://developer.android.com/tools/testing/activity_test.html#TestFailure - Chuck Krutsinger
1
我阅读了开发者网站和这篇文章。我理解你的观点。但我不确定我同意“这是一个好习惯”的说法,然而,我也不认为它是一个坏习惯。哈哈 - Bill Mote
1
很好。也许你会认为测试名称应该反映它们的意图。我经常将我的测试命名为testSomeActionShouldProduceSomeResult。这样测试本身就可以解释清楚了。在testPreconditions这个测试中,它只是验证所有测试所需的前提条件。如果这个测试失败了,那么我需要调查和解决的问题就很明显了。这只是一种命名约定。和你一样,我最初以为它会首先执行,但事实证明它只是像任何测试一样,但是其名称遵循了一个意图清晰的约定。 - Chuck Krutsinger
我想我可以接受那个。 - Bill Mote

1
根据Android SDK的示例:
   The name 'test preconditions' is a convention to signal that if this
   test doesn't pass, the test case was not set up properly and it might
   explain any and all failures in other tests.  This is not guaranteed
   to run before other tests, as junit uses reflection to find the tests.

0
请确保你继承的是正确的类(ActivityInstrumentationTestCase2),并且你的方法签名匹配:
public void testPreconditions()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接