gpt4 book ai didi

java - JUnit-Test 类测试和项目测试之间存在差异

转载 作者:行者123 更新时间:2023-12-02 07:33:41 25 4
gpt4 key购买 nike

我在 Java 应用程序中遇到了与单元测试相关的奇怪错误。

在单元测试期间,我使用预填充自定义数据的内存中 HSQLDB(通过自动触发的插入脚本)和 Hibernate 作为 ORM 来访问它。

问题如下,如果我在单个类(即:TestDummyClass.java)上启动单元测试,则会重新创建数据库(从原始插入脚本)在每个方法测试之后

如果我在包含多个测试类的整个项目(src/test)上启动单元测试,则数据库会在每个测试类的开头初始化,而不是在每个测试方法上初始化。

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:com/wizche/app-context-test.xml" })
public class TestDummyClass {
.....
}

这意味着,例如,如果在 TestDummyClass 中我在某些测试方法中更改数据库(即创建新对象),则新对象将保留在同一类中的以下测试方法中。因此,如果我在项目或单个类上启动它,断言应该有所不同!

有人可以解释一下为什么会发生这种情况吗?我如何决定何时恢复 clean-db?

注意:我在整个测试项目中使用 SpringJUnit4ClassRunner 和自定义上下文配置(其中没有与单元测试相关的参数)。NB2:我直接在 SpringEclipse 中启动 JUnit

最佳答案

原因是,如果您使用 SpringJUnit4ClassRunner,如果您对多个测试使用完全相同的位置,它往往会缓存应用程序上下文 - 此缓存是跨套件的,因此如果您在单个套件中执行项目中的所有测试,并在多个测试中使用相同的应用程序上下文位置,您很可能会获得缓存的上下文 - 如果您修改上下文中的 bean,这也会反射(reflect)在其他测试中。

修复方法是向测试类或测试方法添加@DirtiesContext注释

关于java - JUnit-Test 类测试和项目测试之间存在差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12565266/

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