是否有支持以下场景的Java测试库?
假设您必须为基于数据库的Web应用程序编写Web浏览器测试(例如,使用Selenium)。典型的测试将具有以下工作流程:
特别是在这种集成测试的情况下,您经常需要一组复杂的不同对象才能运行Web应用程序(例如,您需要一个用户帐户,与业务相关的东西,如产品,oders,...... )。为了使测试彼此独立并且能够并行运行测试,您希望为每个测试创建此对象网络,可能使用伪随机对象属性,如user.name="user_123"
。
现在,在我看来,每个测试必须重复的事情的好地方是@Before
- 注释方法。但是,如果@Before
方法插入数据库状态,则测试方法将不知道如何访问此状态,例如如何找到@Before
方法创建的用户对象。有一种测试方法上下文会很好,它由@Before
方法设置,可以被测试方法使用。
我想过在我自己实现这样的东西,也许是一个简单的静态hashmap,测试方法名称是关键,但可能已经有一个提供此功能的库,你知道它;-)。
答案 0 :(得分:1)
你几乎就在那里。事实上,我们在产品(HP ALM)中使用完全相同的技术进行集成测试。
在您的测试类中,存储@Before方法在成员中生成的任何标记,并在测试中使用它们。
为了不对每个集成测试类重复这一点,我们定义了一个包含所有上下文和初始化逻辑的基类,我们只需使用测试代码进行扩展。
此基类可以扩展您可能正在使用的任何其他测试基础(例如AbstractJUnit4SpringContextTests)。
答案 1 :(得分:0)
rainer198,而不是“清除数据库”,你可以回滚tx。我用这种方式解决问题,它更干净,但显然,它取决于你的行为。
春天我用
@Transactional //This annotation tells the Spring test runner to always roll back each transaction it creates.
@TransactionConfiguration(defaultRollback = true)
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "/spring/common-main-test.xml")