2016-07-13 103 views
1

스프링 부트에서 MongoRepository에 대한 테스트를 작성했으며 테스트가 정상적으로 작동합니다. 유일한 문제는 테스트가 끝나면 롤백이 필요하므로 테스트로 인해 데이터베이스가 변경되지 않는다는 것입니다. 스프링 부트 MongoRepository @Rollback for tests

// 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())); 
    } 
} 

나는 @Rollback 전에 @Transactional을 추가하는 듯했으나이 오류를 얻을 :

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! 
+0

일반적으로 테스트 메소드 실행 후 모든 트랜잭션을 롤백합니다. 클래스에'@ Transactional'을 추가하고'@ Rollback'을 삭제하십시오. 이것은 효과가있다. – Patrick

+0

나는 여전히 같은 오류가 발생합니다. 검색하는 데 실패했습니다 .... – kalahari

+0

'@Transactional ("PlatformTransactionManager")' – Patrick

답변

0

를 지금까지 내가 아는 한, 그것은에에는 트랜잭션되지 않기 때문에 MongoDB를위한 Spring의 TransactionManager에의 구현이없는 ACID 감각. 따라서 아니요, MongoDB에서 @Transactional 어노테이션을 사용할 수 없으므로 모든 정리 작업을 수동으로 수행하거나 DBUnit을 사용하고 MongoDB에 대한 확장을 직접 추가해야합니다.

+0

으로 시도하는 것보다 더 나은 해결책이 나타날 때까지 받아 들일 것입니다. ( – kalahari

+0

[이 질문] (https://stackoverflow.com/questions/)을 볼 수도 있습니다. 21386449/spring-data-and-mongodb-simple-roll-back-with-spring-in-transactional) 같은 대답을 얻을 수 있지만 :) –