java kiwi_Java中的Mongodb单元测试 - kiwi

如何进行Mongodb测试? 我们在java中使用Mongodb作为数据库进行存储的时候,怎么样对于进行测试呢?一种可能直接的方式就是在setUp中getDB,然后在tearDown里面dropDatabase。这样的方式相对来说比较慢。一种更好的方式就是使用fake的数据库,比如embedded的

如何进行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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值