小编典典
正如sbridges在这篇文章中所写的那样,不拥有专门的服务(有时也称为存储库或DAO)是一个坏主意,该服务会从逻辑中抽象出数据访问权限。然后,您可以通过提供DAO的模拟来测试逻辑。
我要做的另一种方法是创建一个Mongo对象的Mock(例如PowerMockito),然后返回适当的结果。这是因为您不必测试数据库是否可以在单元测试中工作,但是更多的时候您应该测试是否向数据库发送了正确的查询。
Mongo mongo = PowerMockito.mock(Mongo.class);
DB db = PowerMockito.mock(DB.class);
DBCollection dbCollection = PowerMockito.mock(DBCollection.class);
PowerMockito.when(mongo.getDB("foo")).thenReturn(db);
PowerMockito.when(db.getCollection("bar")).thenReturn(dbCollection);
MyService svc = new MyService(mongo); // Use some kind of dependency injection
svc.getObjectById(1);
PowerMockito.verify(dbCollection).findOne(new BasicDBObject("_id", 1));
这也是一种选择。当然,模拟的创建和相应对象的返回仅作为上面的示例进行了编码。
2020-09-28