java - 在Java中测试MongoDB : concurrency problems

标签 java mongodb concurrency jenkins

我正在测试 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();
    }

}

在我的测试中,我执行了一些执行以下操作的代码:

  1. 我使用以下命令创建数据库实例:DB database = client.getDB("testdb")
  2. 我在数据库中添加一个集合:database.getCollection("testcoll")
  3. 然后插入一个 BasicDBObject:collection.insert(object, WriteConcern.SAFE)
  4. 此后,我立即使用标准游标方法查询数据库。

正如我的测试设置代码中所示,每次测试后我都会删除数据库并关闭所有客户端连接。我执行了十次这样的测试。当在本地运行它们时,一切都会按我的预期发生。插入对象,然后为每个测试删除数据库(我可以在 mongo 日志中看到这一点)。然而,当在 Jenkins 服务器上执行此操作时,有时会发生这样的情况:在查询数据库时,先前测试的对象仍在该数据库中,尽管该数据库应该已被删除。对我来说,这看起来像是一个并发问题,但我看不到竞争条件位于何处。我无法访问 Jenkins 服务器上的数据库日志。有谁知道我应该改变什么来确保我的测试总是成功?

最佳答案

不要删除数据库。 mongo 中可能有一些内部引用。我不相信您的测试用例需要删除数据库。通常,只需删除测试集合中的所有文档就足够了

关于java - 在Java中测试MongoDB : concurrency problems,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25031383/

相关文章:

javascript - 无法使用 Express NodeJS 和 MongoDB 从 API 检索数据,正在加载

使用 upsert 和多语法更新 Mongodb

java - Java中的不可重入非阻塞信号量

ios - Grand Central Dispatch 和并发任务

java - 我们可以在 java.lang.Object 中添加额外的方法吗?

java - 如何将 POJO 添加到 Spring 上下文以启用注入(inject)依赖项?

java - 需要建议使用 Java 创建交互式 GUI

mongodb - mongodb不存在时如何创建db?

swift 调度队列 : Serial or parallel

java - 如何在 Android 中使用 MVC 模式从 firebase 检索数据?