【发布时间】:2014-01-26 05:22:35
【问题描述】:
是否有支持以下场景的Java测试库?
假设,您必须为基于数据库的 Web 应用程序(例如使用 Selenium)编写 Web 浏览器测试。典型的测试将具有以下工作流程:
- 将测试数据插入数据库
- 运行测试逻辑(打开 Web 浏览器、浏览某处、操作某些内容、验证是否显示正确的内容、验证数据库状态是否正确更改)
- 清除数据库
尤其是在这种集成测试的情况下,您通常需要一组复杂的不同对象来运行 Web 应用程序(例如,您需要一个用户帐户、与业务相关的东西,如产品、订单、... )。为了保持测试相互独立并能够并行运行测试,您希望为每个测试创建这个对象网络,可能具有像user.name="user_123" 这样的伪随机对象属性。
现在,在我看来,为每个测试重复做一些事情的好地方是@Before-annotated 方法。但是,如果 @Before 方法插入一个 DB 状态,则测试方法将不知道如何访问该状态,例如如何找到@Before 方法创建的用户对象。最好有一种测试方法上下文,由@Before方法设置,可以被测试方法使用。
我考虑过自己实现类似的东西,也许是一个简单的静态哈希图,以测试方法名称作为键,但可能已经有一个库提供了这个功能,你知道它;-)。
【问题讨论】:
-
我不明白你的情况。您希望您的测试独立且并行地运行。
@Before中的代码在每次测试之前运行。因此,只有您可以在@before方法中创建的所有测试都通用的测试数据。为什么您不能在测试方法本身中创建非常特定于单个测试的所有其他测试数据? -
因为即使 common 数据不是特定测试的对象,也可能会受到测试方法的影响。考虑用户帐户和两个测试:1)一个测试(作为副作用)导致用户帐户被停用,以及 2)一个创建订单的测试。如果两个测试都依赖于同一个用户对象,那么这些测试就不会是独立的,尽管用户对象不是这些测试的主题。因此,我希望有不同的用户帐户对象,但不想在每个测试中重复创建(即使不是通过辅助方法)。这就是我想使用@before 方法的原因
标签: java integration-testing test-data