Java中的Mongodb單元測試

jopen 11年前發布 | 21K 次閱讀 單元測試 MongoDB

如何進行Mongodb測試?

我們在java中使用Mongodb作為數據庫進行存儲的時候,怎么樣對于進行測試呢?一種可能直接的方式就是在setUp中getDB,然后在tearDown里面dropDatabase。這樣的方式相對來說比較慢。一種更好的方式就是使用fake的數據庫,比如embedded的Mongodb用于測試。http://xunitpatterns.com/Test%20Double.html

我們這里使用的是https://github.com/flapdoodle-oss/de.flapdoodle.embed.mongo


引入依賴

build.gradle

dependencies {
    compile "org.mongodb:mongo-java-driver:2.12.2"


    testCompile "junit:junit:4.11"
    testCompile "de.flapdoodle.embed:de.flapdoodle.embed.mongo:1.46.0"
}


腳手架MongodbBaseTest

編寫一個MongoBaseTest,這樣所有需要Mongo的測試,可以繼承這個類,就可以獲取db了。

public class MongodbBaseTest {
    private static final MongodStarter starter = MongodStarter.getDefaultInstance();
    protected MongoClient mongo;
    protected DB db;
    private MongodExecutable mongodExecutable;
    private MongodProcess mongod;

    @Before
    public void setUp() throws Exception {
        mongodExecutable = starter.prepare(new MongodConfigBuilder()
                .version(Version.Main.PRODUCTION)
                .net(new Net(12345, Network.localhostIsIPv6())).build());
        mongod = mongodExecutable.start();


        mongo = new MongoClient("localhost", 12345);
        db = mongo.getDB("embedded-mongo");
    }

    @After
    public void tearDown() throws Exception {
        mongod.stop();
        mongodExecutable.stop();
    }
}


編寫UserTest

public class UserTest extends MongodbBaseTest {
    private DBCollection users;

    @Override
    @Before
    public void setUp() throws Exception {
        super.setUp();
        users = db.getCollection("users");
    }

    @Test
    public void should_insert_and_get_user() {
        final DBObject userDocument = new BasicDBObjectBuilder()
                .add("name", "kiwi")
                .get();
        users.insert(userDocument);

        final DBObject userDocumentFromDb = users.findOne(new BasicDBObject("_id", userDocument.get("_id")));

        assertThat(userDocumentFromDb.get("name"), is("kiwi"));
    }
}


其他:

https://github.com/fakemongo/fongo

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!