2016-07-13 189 views
1

我在Spring Boot中爲MongoRepository寫了一個測試,測試正常。唯一的問題是,當測試結束時,我想要回滾,以便測試引起的數據庫不會發生變化。Spring Boot MongoRepository @Rollback測試

// 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代碼。那麼,我該如何解決這個問題?

編輯:據我所知

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

通常在執行測試方法後,Spring會回滾每個事務。在你的類上添加'@ Transactional'並刪除'@ Rollback'。這應該工作。 – Patrick

+0

我仍然得到相同的錯誤:未能檢索.... – kalahari

+0

嘗試使用'@Transactional(「PlatformTransactionManager」)' – Patrick

回答

0

,沒有MongoDB的Spring的事務管理器的實現,因爲它沒有在事務:添加@Transactional("PlatformTransactionManager")後,我得到的錯誤是改變這一ACID意義。所以不行,你不能在MongoDB中使用@Transactional註解,你必須手動完成所有的清理工作,或者使用DBUnit併爲MongoDB添加你自己的擴展。

+0

我想我會接受這個,直到更好的解決方案出現:( – kalahari

+0

)您也可以看看[這個問題](https://stackoverflow.com/questions/) 21386449/spring-data-and-mongodb-simple-roll-back-with-spring-within-transactional),儘管你會得到同樣的答案:) –

相關問題