Chr*_*onn 3 java junit spring unit-testing h2
我正在进行 junit 测试,在每个测试用例之前添加一些用户。代码是:
@BeforeEach
void setUp() {
saveUser();
saveEntry();
}
@Test
void saveUser() {
User user = new User();
user.setUserId(null);
user.setUsername("John");
user.setEmail("john@foo.com");
user.setPassword("password");
userService.saveUser(user);
}
@Test
void saveEntry() {
Entry entry = new Entry();
entry.setText("test text");
entry.setUserId(1L);
entryService.saveEntry(entry);
}
Run Code Online (Sandbox Code Playgroud)
如您所见,我正在使用服务层中的方法来创建条目和用户。如果我一项一项地运行测试,就没有问题。但是当我运行所有测试时,数据库不会返回 1 个项目,而是返回多个项目,因此会发生异常。
我需要在每次测试后使用 @AfterEach 注释清理 h2 db,但我的代码中没有并删除要调用的方法。如何清理 H2 数据库?
除了 @J Asgarov 答案之外,spring-boot如果您想在每次测试之前和之后执行一些操作(更具体地说是在方法之前@Before和之后@After),您可以使用@Sql注释来执行特定sql脚本,例如从测试资源执行特定脚本。
@Sql("init.sql")
@Sql(scripts = "clean.sql", executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD)
public class TestClass
}
Run Code Online (Sandbox Code Playgroud)
这对于 来说可能很方便sequences,因为他们不关心回滚。
关于@Transactional@Mark Bramnik提到的要小心,因为事务跨越整个测试方法,所以你无法验证事务边界的正确性。
| 归档时间: |
|
| 查看次数: |
5194 次 |
| 最近记录: |