MongoDB和Mockito不能一起使用吗?

4
我正在尝试在我的Java代码中设置mongodb的mocks,并且我遇到了以下异常:
org.mockito.exceptions.misusing.WrongTypeOfReturnValue:
DBCursor$$EnhancerByMockitoWithCGLIB$$fc4f0e22 cannot be returned by getOptions()
getOptions() should return int

生成此内容的代码行是:
when(col.find(query)).thenReturn(cursor);

在这里,col是模拟的DBCollection,query是模拟的DBObject,cursor是模拟的DBCursor。
我发现以下问题描述非常模糊,但可能与问题有关:http://osdir.com/ml/mongodb-user/2010-08/msg02102.html
1个回答

4

有一句话说:“不要嘲笑你没有掌握的类型!” - bric3
2
@Brice:实际上,我很确定你应该对你不拥有的类型进行模拟。所以我不明白你的观点。 - Kevin
这是错误的,有几个原因(但也许有例外)。你不拥有的类型有它们自己的行为,不要试图模拟它们。相反,创建一个使用真实类型的集成类型。阅读这篇文章,它会比这个评论更好地解释和详细说明为什么我说“不要模拟你不拥有的类型!”:http://www.davesquared.net/2011/04/dont-mock-types-you-dont-own.html - bric3
2
直接调用外部服务会导致单元测试变慢且不可靠,这就是为什么需要模拟的原因。集成测试无疑是必要的,但与单元测试是分开的。 - Kevin
这是你的决定,但很多人都同意那个公理,在这个问题上有一个相关的问题。关于将业务与访问层分离的问题,我实际上并不喜欢DAO或数据访问服务,然而在你的业务代码和纯通用数据层之间进行技术间接本身并不是一个坏主意。特别是在这些日子里,NoSQL周围有很多创新。我并不是说你应该添加DAO,而是要分离你代码的不同关注点。 - bric3
显示剩余7条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接