Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java mongodb+;莫基托没有';我们不能一起工作吗?_Java_Mongodb_Mockito - Fatal编程技术网

Java mongodb+;莫基托没有';我们不能一起工作吗?

Java mongodb+;莫基托没有';我们不能一起工作吗?,java,mongodb,mockito,Java,Mongodb,Mockito,我试图在java代码中为mongodb设置mock,但出现以下异常: org.mockito.exceptions.misusing.WrongTypeOfReturnValue: DBCursor$$EnhancerByMockitoWithCGLIB$$fc4f0e22 cannot be returned by getOptions() getOptions() should return int 生成此代码的代码行是: when(col.find(query)).thenReturn(

我试图在java代码中为mongodb设置mock,但出现以下异常:

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

我发现以下问题描述非常模糊,但可能相关:


刚刚发现问题,find(DBObject obj)方法是DBCollection中的最终方法:


PowerMock最终解决了我的问题,因为它允许模拟最终方法。

有句谚语:“不要模拟你不拥有的类型!”@Brice:事实上,我很确定你应该模拟你不拥有的类型。所以我不明白你的意思。好吧,这是错误的,有几个原因(不过可能有例外)。你不拥有的类型有他们自己的行为,不要试图嘲笑它。而是创建一个使用真实类型的集成类型。读了这篇文章,它会比这篇评论更好更透彻地解释为什么我说不要模仿你们不拥有的类型!对外部服务的直接调用会创建缓慢且不可靠的单元测试,这就是mock存在的原因。集成测试无疑是必要的,但与单元测试是分开的。MongoDB测试不属于集成测试类别吗?;)如果您的所有测试都需要调用外部服务,那么您可能会遇到设计问题或面临“遗留设计”。如果您确实需要模拟外部系统,然后将它们封装在您实际拥有的类型中,那么这些封装器将作为集成测试进行测试。如有必要,可使用模拟像往常一样测试其他对象。顺便说一句,不要模仿你不拥有的类型是mockito很长一段时间以来的指导方针之一。