gpt4 book ai didi

java - 用于测试的 Spring Boot MongoRepository @Rollback

转载 作者:行者123 更新时间:2023-11-28 20:20:07 24 4
gpt4 key购买 nike

我在 Spring Boot 中为 MongoRepository 编写了一个测试,测试运行良好。唯一的问题是当测试结束的时候,我想要一个回滚,这样就不会因为测试导致数据库发生变化。

// package...

// imports...

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = MetistrafficApplication.class)
@Rollback(true)
public class AppRepositoryTests {

@Autowired
private AppRepository appRepository;

@Test
public void insertTest() {
App app = new App("test");
App appInserted = appRepository.save(app);

assertThat(appInserted.getName(), equalTo(app.getName()));
}
}

我把@Transactional 放在@Rollback 之前,但是得到这个错误:

java.lang.illegalstateexception:Failed to retrieve PlatformTransactionManager for @Transactional test for test context

当我搜索错误时,我找不到任何带有 MongoRepository 的代码。那么,我该如何解决呢?

编辑:添加 @Transactional("PlatformTransactionManager") 后,我得到的错误更改为:

org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'PlatformTransactionManager' is defined: No matching PlatformTransactionManager bean found for qualifier 'PlatformTransactionManager' - neither qualifier match nor bean name match!

最佳答案

据我所知,没有针对 MongoDB 的 Spring TransactionManager 的实现,因为它在 ACID 意义上不是事务性的。所以不,您不能对 MongoDB 使用 @Transactional 注释,您必须手动进行所有清理,或者使用 DBUnit 并为 MongoDB 添加您自己的扩展。

编辑:作为Petter他的回答中提到,从MongoDB 4.0开始,MongoDB有support for ACID transactions你可以找到 official SpringData examples on GitHub还有feature's release post在 Spring 的开发者博客中

关于java - 用于测试的 Spring Boot MongoRepository @Rollback,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38354181/

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