我正在测试 Java 应用程序中将数据存储在 MongoDB 数据库中的部分。我的测试设置如下所示:
public class MongoDataStoreTest {
private MongoClient client;
@Before
public void before() throws UnknownHostException {
this.client = new MongoClient();
}
@After
public void after() throws InterruptedException {
this.client.dropDatabase("testdb");
this.client.close();
}
}
在我的测试中,我执行了一些执行以下操作的代码:
- 我使用以下命令创建数据库实例:
DB database = client.getDB("testdb")
- 我在数据库中添加一个集合:
database.getCollection("testcoll")
- 然后插入一个 BasicDBObject:
collection.insert(object, WriteConcern.SAFE)
- 此后,我立即使用标准游标方法查询数据库。
正如我的测试设置代码中所示,每次测试后我都会删除数据库并关闭所有客户端连接。我执行了十次这样的测试。当在本地运行它们时,一切都会按我的预期发生。插入对象,然后为每个测试删除数据库(我可以在 mongo 日志中看到这一点)。然而,当在 Jenkins 服务器上执行此操作时,有时会发生这样的情况:在查询数据库时,先前测试的对象仍在该数据库中,尽管该数据库应该已被删除。对我来说,这看起来像是一个并发问题,但我看不到竞争条件位于何处。我无法访问 Jenkins 服务器上的数据库日志。有谁知道我应该改变什么来确保我的测试总是成功?
最佳答案
不要删除数据库。 mongo 中可能有一些内部引用。我不相信您的测试用例需要删除数据库。通常,只需删除测试集合中的所有文档就足够了
关于java - 在Java中测试MongoDB : concurrency problems,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25031383/