我们有CMS网络应用,我们会执行以下操作:
- add new / modify customer profile (company)
- add new / modify users of company
- add new / modify content by users
- etc...
现在我们以下列方式使用Selenium + JUnit开发了一些测试:
addNewCompanyTest()
updateCompanyTest()
deleteCompanyTest()
最好的做法是在 addNewCompanyTest()(删除新创建的公司)之后执行清理,这实际上将执行与 deleteCompanyTest()。我在两个测试中都调用了相同的方法deleteCompany(Company c)。
deleteCompanyTest()实际上是在创建一个新公司,所以看起来 addNewCompanyTest()是多余的,因为如果另一个工作则必须通过。< / p>
我有两个想法如何管理:
我可以使用按字母顺序执行测试的JUnit功能(这需要测试重命名),或者切换到TestNG,因为它支持测试顺序。但这是一个很好的做法,因为人们甚至走相反的方式,迫使随机测试顺序?
在这个测试中,我会创建一个新公司,然后更新它并删除它。
这里最好的方法是什么?
如果2),那么你删除像addNewCompanyTest()这样的小测试吗?也许更好的方法是专注于更高级别的测试,例如 addAndDeleteContentAsCompanyUserTest(),这将创建公司,创建用户,以用户身份登录并创建新内容,然后删除它,而不是保持低等级?
答案 0 :(得分:1)
在我看来,你不应该仅仅因为你碰巧知道如何实施它们来优化测试中的重复。
您应该明确测试每个必需的行为和行为组合。每个测试都应该可以独立运行,并明确设置其所需状态并拆除(重置为已知状态)运行后所做的任何更改。
我实现这一点的方法是创建一个用于添加,删除和更新公司的小内部测试“API”。您也可以编写一个删除所有公司的reset()
方法。然后,您可以从测试方法中调用这些API方法,而不会产生大量重复。此API还允许您添加更复杂的测试,例如添加多个公司,然后删除其中一些公司,将同一公司添加两次等。
之后重置的替代方法是在每次测试之前重置。您可以将reset()
放入@Before
方法或@After
方法。在测试方法之前执行重置的优点是,如果测试失败,您将能够看到错误状态。之后进行重置的优点是您可以对其进行优化,以便它只删除它创建的内容。