gpt4 book ai didi

java - 数据库单元测试框架?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:18:49 26 4
gpt4 key购买 nike

在我的项目中,我使用了 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() {
}

}

注意:

  1. 并非所有测试类都需要额外的上下文,请跳过特定子类上的 @ContextConfiguration
  2. 我们通过 ant 执行并在 junit 任务上使用 forkmode="perBatch" 属性。这确保所有测试都使用相同的上下文配置运行(避免为每个测试重新加载 Spring 上下文)。您可以使用 @DirtiesContext 来指示应在方法/类之后刷新上下文。
  3. @Test 注释标记每个方法。 Spring 框架不选择使用 Junit 的 public void testXXX() 约定的方法。

关于java - 数据库单元测试框架?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6941070/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com