2016-07-13 24 views
1

私はSpring Bootで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を持つ任意のコードを見つけることができませんでした。ですから、どうすればこの問題を解決できますか?

EDIT:@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のトランザクションマネージャーの実装はありませんACID感覚。 MongoDBで@Transactionalアノテーションを使用することはできません。すべてのクリーンアップを手動で行うか、DBUnitを使用してMongoDBの拡張機能を追加する必要があります。

+0

を試してみてください。より良い解決策が表示されるまで、これを受け入れることにします:( – kalahari

+0

[この質問](https://stackoverflow.com/questions/) 21386449/spring-data-and-mongodb-simple-roll-back-with-spring-within-transactional)、同じ回答を得られます:) –

関連する問題