在我的项目中,我使用了 spring、jpa 和 PostgreSQL DB, 我在数据库中有很多表,我需要对所有表进行单元测试。
是否有任何框架可以在每次测试完成后回滚所有事务,以便每个测试都有新的/相同的数据库数据进行测试。这样在所有测试执行后,数据库模式的数据将保持原样。
对此有什么建议吗?
我对 DBUnit 有一些了解,但我需要为每个测试的每个输入数据编写 .xml 文件,并且需要在 setup() 中插入数据并在 tearDown() 中清除/删除数据,但不需要对我来说似乎是更好的策略。
任何建议表示赞赏。 谢谢。
最佳答案
正如@Ryan 所指出的.... Testing section of the Spring Reference manual应该咨询。
一些启动技巧...
我们已经使用 Spring 的 AbstractTransactionalJUnit4SpringContextTests
处理了这个问题。
例如,我们定义一个抽象父类(super class):
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("file:WebContent/WEB-INF/testconfig/test-web-application-config.xml")
@TransactionConfiguration()
@Transactional
public abstract class OurAbstractTransactionalSpringContextTest extends AbstractTransactionalJUnit4SpringContextTests {
}
然后需要额外上下文的各个子类被定义为:
@ContextConfiguration("classpath:path/to/config/ConfigForTestCase.xml")
public class TestOurFunction extends OurAbstractTransactionalSpringContextTest {
@Test
public void testOurMethod() {
}
}
注意:
- 并非所有测试类都需要额外的上下文,请跳过特定子类上的
@ContextConfiguration
。 - 我们通过 ant 执行并在
junit
任务上使用forkmode="perBatch"
属性。这确保所有测试都使用相同的上下文配置运行(避免为每个测试重新加载 Spring 上下文)。您可以使用@DirtiesContext
来指示应在方法/类之后刷新上下文。 - 用
@Test
注释标记每个方法。 Spring 框架不选择使用 Junit 的public void testXXX()
约定的方法。
关于java - 数据库单元测试框架?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6941070/