在Selenium中断言与验证

时间:2011-04-21 12:08:20

标签: testing selenium integration-testing

selenium执行的检查通常有两种形式:assertFoo和verifyFoo。我知道assertFoo在整个测试用例中失败了,而verifyFoo只是注意到该检查失败并让测试用例继续运行。

因此,使用verifyFoo,我可以获得多个条件的测试结果,即使其中一个条件失败。另一方面,对我来说,一次失败的检查就足以知道,我的编辑破坏了代码,无论如何我必须纠正它们。

所以我的问题是:
在哪些具体情况下,您更喜欢检查另一种方式中的一种?您有什么经验可以激发您的观点?

4 个答案:

答案 0 :(得分:16)

我会在测试中使用assert()作为入口点(“网关”)。只有断言通过,才会执行verify()检查。例如,如果我正在检查由一系列操作产生的窗口内容,我会assert()存在窗口,然后verify()内容。

我经常使用的示例 - 检查jqgrid中的估算值:assert()网格的存在,以及verify()估算值。

答案 1 :(得分:3)

我遇到了一些使用

克服的问题

assert*()

而不是

verify*()

例如,如果要检查表单元素,在表单验证中,即使字符串不在表单中,

verifyTrue(...);
的使用也只会通过测试。

如果将assert替换为verify,则它按预期工作。

我强烈建议使用assert *()。

答案 2 :(得分:2)

如果您在生产系统上运行Selenium测试并且想要确保以测试用户身份登录,例如,首先断言正确的用户已登录,而不是您的个人帐户在触发任何会产生意外影响的行为之前,如果意外使用的话。

答案 3 :(得分:1)

通常你应该坚持每个测试用例一个断言,在这种情况下,差异归结为必须运行的任何拆除代码。但是你应该把它放在@After方法中。

我在SeleneseTestBase中使用verify*()方法遇到了很多问题(例如,他们使用System.out.println(),而com.thoughtworks.selenium.SeleneseTestBase.assertEquals(Object, Object)只是没有达到预期的效果)所以我已经停止使用它们。