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

标签 java unit-testing spring jpa dbunit

在我的项目中,我使用了 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/

相关文章:

java - 我在这个方法中做错了什么? (使用 StringBuilder 从 4 个字符串创建一个新单词)

javascript - 在开 Jest 中使用 expo sqlite 调用单元测试类

java - 如何在 Java 中将属性映射到 Integer Mapstruct

java - 如何在不使用带有 spring hateoas 的@EnableHypermediaSupport 的情况下启用 HAL 渲染?

java - 设置面板在选中复选框时显示? ( java )

java - 确定字符数组列表中的变量 Java

java - 数组 : selection sort doesn't display

java - 在 Android 应用程序中为 Toast 编写 JUnit 测试

php - session 开始/关闭的单元测试问题

spring - 在 Grails 中,指定实现相同接口(interface)的两个类中的哪一个应该用于注入(inject)