有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在CMS中设计/组织与创建/读取/更新/删除操作相关的测试?(硒)

我们有CMS web应用程序,可以执行以下操作:

- add new / modify customer profile (company)
- add new / modify users of company
- add new / modify content by users
- etc...

目前,我们使用Selenium+JUnit以以下方式开发了一些测试:

addNewCompanyTest()
updateCompanyTest()
deleteCompanyTest()

最佳实践是在添加新公司测试()(删除新创建的公司)之后执行清理,实际上执行的步骤与删除公司测试()中的步骤相同。我在两个测试中调用了相同的方法deleteCompany(companyC)

deleteCompanyTest()实际上正在创建一个新公司,因此看起来addNewCompanyTest()是多余的,因为如果其他公司正常工作,它必须通过

我有两个办法来管理这个问题:

1) 强制按给定顺序执行测试

我可以使用JUnit特性,按照字母顺序执行测试(这需要测试重命名),或者切换到TestNG,因为它支持测试顺序。但这是一个好的做法吗,因为人们甚至会走相反的路,强制随机测试顺序

2) 创建一个测试companyCRUDTest()

在这个测试中,我将创建一个新公司,然后更新它,然后删除它


这里最好的方法是什么

如果为2),那么是否删除较小的测试,如addTest()?也许更好的方法是只关注更高级别的测试,比如addanddeleteContentsCompanyUserTest(),它将创建公司、创建用户、以用户身份登录并创建新内容,然后将其删除,而不是维护低级别的内容


共 (1) 个答案

  1. # 1 楼答案

    在我看来,你不应该仅仅因为知道测试是如何实现的,就优化测试中的重复

    您应该明确地测试每个必需的行为和行为组合。每个测试都应该能够独立运行,并显式设置其所需的状态,并在运行后删除(重置为已知状态)它所做的任何更改

    我实现这一点的方法是创建一个小的内部测试“API”,用于添加、删除和更新公司。您还可以编写一个reset()方法来删除所有公司。然后可以从测试方法中调用这些API方法,而无需创建大量重复。此API还允许您添加更复杂的测试,例如添加几个公司,然后删除其中一些公司,两次添加同一个公司等

    在每次测试之前重置是一种事后重置的替代方法。您可以将reset()放入@Before方法或@After方法中。在测试方法之前进行重置的优点是,如果测试失败,您将能够看到错误状态。事后重置的好处是,您可以对其进行优化,使其只删除创建的内容