2012-03-17 77 views
0

要隔離運行我所有的測試,我希望每次調用測試方法時都讀取POJO註釋,並刪除並重新創建一個MongoDb集合。問題是似乎只有在實例化MongoTemplate類時才創建索引。我該如何重新創建一個包含所有索引的集合?

這是完美的「正常」的應用,但在集成測試階段,我想有這樣的測試(對於實際應用可能太慢了...):

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(loader = AnnotationConfigContextLoader.class, classes = { 
    ApplicationConfig.class, 
    MongoConfiguration.class, 
    TestMongoConfiguration.class}) 
@ActiveProfiles("test") 
public class BookServiceIntegrationTests { 
    private @Autowired TestHelper testHelper; 

    @Before 
    public void startup() { 
     testHelper.init(Book.class); 
    } 

    @After 
    public void cleanup() { 
     testHelper.drop(Book.class); 
    } 

    //test methods... 
} 

這是我非常簡單的POJO類:

@Document(collection = "books") 
public class Book { 
    @Id 
    private ObjectId id; 

    @Indexed(unique = true) 
    private String isbn; 

    private String author; 
    private String title; 
    private String genre; 

    private List<String> tags; 
    private List<Comment> comments; 
} 

檢查春季數據源的MongoDB(1.0.1.RELEASE)只見那類MongoPersistentEntityIndexCreator正在讀取POJO的註解以及確保總彙索引。這個類僅在MongoTemplate構造函數中被調用。

您是否認爲我可以在我的測試中找到更好的方法來模擬回滾事務?

感謝, 卡羅

回答

0

編輯,因爲我可以看到你想要閱讀的註釋,所以接下來可能是你已經嘗試過的東西。如果您可以使用Java以外的集合編寫腳本,則可以嘗試以下方法:

使用來自Java的系統運行時exec執行mongodump和mongorestore。

首先,拍攝快照您的測試集合:

/usr/bin/mongodump -d yourDB -c books 

然後在你的JUnit測試的設置,恢復徵收,與--drop選項第一丟棄舊的。

/usr/bin/mongorestore --drop -d yourDB -c books dump/yourDB 

這應該同時恢復索引。

+0

謝謝。這將是第二步:在測試套件執行之前加載測試數據。我將嘗試將這些命令添加到我的gradle腳本中。 – 2012-03-17 17:33:15

相關問題