要单独运行我的所有测试,我想在每次调用测试方法时删除并重新创建一个MongoDb集合,读取POJO注释。问题是,只有在实例化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的Spring数据源(1.0.1.RELEASE)我看到MongoPersistentEntityIndexCreator类正在读取POJO注释并确保收集的索引。只在MongoTemplate构造函数中调用此类。
您认为我能在我的测试中找到更好的方法来模拟回滚事务吗?
谢谢, 卡罗
答案 0 :(得分: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
这应该同时恢复索引。