0

为了单独运行我的所有测试,我想在每次调用测试方法时删除并重新创建一个 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 Data (1.0.1.RELEASE) 的源我看到 MongoPersistentEntityIndexCreator 类正在读取 POJO 注释并确保集合的索引。此类仅在 MongoTemplate 构造函数中调用。

你认为我能找到一种更好的方法来模拟我的测试中的回滚事务吗?

谢谢,卡罗

4

1 回答 1

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 

这应该同时恢复索引。

于 2012-03-17T14:38:09.780 回答