我正在尝试使用Spring Boot和Mongo Embedded(JHipster,Flapdoodle)设置测试。 一般来说它有效。我可以在Robomongo中看到创建的测试集合和对象(使用Mongobee迁移)。
但是当我想访问Clients集合时:
List clients = clientRepository.findAll();
它抛出:
java.lang.IllegalArgumentException: Given DBObject must be a BasicDBObject! Object of class [org.jongo.bson.RelaxedLazyDBObject] must be an instance of class com.mongodb.BasicDBObject
当我使用真正的Mongo实例运行应用程序时: ./mvnw -Pdev 即使测试和开发配置使用相同的Mongobee mibrations,也没有错误。
Spring文档非常简洁: http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#boot-features-mongo-embedded
我的测试配置文件application.yml是:
spring:
mongodb:
embedded:
version: 3.2.1
data:
mongodb:
host: localhost
port: 27117
database: mydb-test
我使用Mongo(实例)版本v3.2.7,在我设置的嵌入式Mongo的配置最高版本是3.2.1,也许这可能是个问题?
也许有人可以通过示例工作测试分享他的配置?
答案 0 :(得分:1)
我发现自己的解决方案。
问题是我在@ChangeSet中使用 org.jongo.Jongo 而不是JHipster默认 com.mongodb.Db 。
由于某些原因,Jongo不能与Embedded Mongo一起使用。 当我切换到Db时,所有问题都已消失。
不工作:
@ChangeSet(...)
public void someChange(Jongo jongo) throws IOException {
org.jongo.MongoCollection collection = jongo.getCollection("collection");
DBObject basicDBObject = new BasicDBObject();
collection.insert(basicDBObject);
...
}
WORKING:
@ChangeSet(...)
public void someChange(Db db) throws IOException {
com.mongodb.MongoCollection collection = db.getCollection("collection");
DBObject basicDBObject = new BasicDBObject();
collection.insert(basicDBObject);
...
}