Java 如何在spring boot中为MongoDB@Transnational编写集成测试

Java 如何在spring boot中为MongoDB@Transnational编写集成测试,java,mongodb,spring-boot,transactions,Java,Mongodb,Spring Boot,Transactions,我使用@Transactional注释来保存调用(我使用的是MongoDB),它工作得非常好,但我想为它编写集成测试。我在应用程序中使用了firebase身份验证。有人能告诉我如何为它编写集成测试吗?这就是我想为其编写测试的方法 @Override @Transactional public DatabaseWriteResponse<UserDetails> save(UserDetails userDetails) throws AuthorizationException {

我使用@Transactional注释来保存调用(我使用的是MongoDB),它工作得非常好,但我想为它编写集成测试。我在应用程序中使用了firebase身份验证。有人能告诉我如何为它编写集成测试吗?这就是我想为其编写测试的方法

@Override
@Transactional
public DatabaseWriteResponse<UserDetails> save(UserDetails userDetails) throws AuthorizationException {
    DatabaseWriteResponse<UserDetails> response = null;
    try {
        response = save(userDetails);
    } catch (UncategorizedMongoDbException | MongoCommandException e) {
        TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
        response = new DatabaseWriteResponse<>();
        response.setStatus(STATUS.WRITE_CONFLICT);
        return response;
    }
    return response;
}
@覆盖
@交易的
公共数据库写入响应保存(UserDetails UserDetails)引发AuthorizationException{
DatabaseWriteResponse响应=null;
试一试{
响应=保存(用户详细信息);
}捕获(未分类MongoodBeException | MongoCommandException e){
TransactionSpectSupport.currentTransactionStatus().setRollbackOnly();
response=新数据库writeresponse();
response.setStatus(STATUS.WRITE_CONFLICT);
返回响应;
}
返回响应;
}
我试过这个

@Test
public void saveUserDetailsByTwoUserAtSameTime() throws InterruptedException {
    List<DatabaseWriteResponse.STATUS> ls = new ArrayList<DatabaseWriteResponse.STATUS>();
    Thread thread1 = new Thread() {
        public void run() {
            DatabaseWriteResponse response = userDetailsStorageManager.save(userDetails);
            ls.add(response.getStatus());
        }
    };
    Thread thread2 = new Thread() {
        public void run() {
            DatabaseWriteResponse response = userDetailsStorageManager.save(userDetails);
            ls.add(response.getStatus());
        }
    };

    thread1.start();
    thread2.start();

    thread1.join();
    thread2.join();
}
@测试
public void saveUserDetailsByTwoUserAtSameTime()引发InterruptedException{
List ls=新的ArrayList();
线程thread1=新线程(){
公开募捐{
DatabaseWriteResponse-response=userDetailsStorageManager.save(userDetails);
ls.add(response.getStatus());
}
};
线程thread2=新线程(){
公开募捐{
DatabaseWriteResponse-response=userDetailsStorageManager.save(userDetails);
ls.add(response.getStatus());
}
};
thread1.start();
thread2.start();
thread1.join();
螺纹2.连接();
}
我已经编写了一个customUserSecurityContext类来模拟用户进行测试。
当我调用
DatabaseWriteResponse=userDetailsStorageManager.save(userDetails)时没有线程,它正在工作,但在这种情况下,我无法测试事务,当我从线程调用它时,它会给我身份验证失败错误。

您正在尝试为多线程场景编写单元测试吗。另外,我在代码中没有看到任何模拟。请解释您测试的目的。正如您所看到的,我已经将事务与save call一起使用,我想编写一个集成测试来检查事务是否正常工作。当我通过登录两个用户并同时进行save调用从UI测试它时,它工作正常,但我想知道如何为它编写集成测试。您是否正在尝试为多线程场景编写单元测试。另外,我在代码中没有看到任何模拟。请解释您测试的目的。正如您所看到的,我已经将事务与save call一起使用,我想编写一个集成测试来检查事务是否正常工作。当我通过登录两个用户并同时进行save调用从UI测试它时,它工作正常,但我想知道如何为它编写集成测试。