Java 使用Mockito或jUnit验证方法内的调用
我正在对DAO进行一些修改。这些修改包括重构一些代码,以防止一些方法多次调用Java 使用Mockito或jUnit验证方法内的调用,java,spring,junit,mockito,Java,Spring,Junit,Mockito,我正在对DAO进行一些修改。这些修改包括重构一些代码,以防止一些方法多次调用.getResultsList()。相反,结果被缓存到列表中,所有后续代码都与该列表一起工作,只需访问数据库一次,代码就能更高效地运行 我被要求为我修改过的方法创建jUnit测试,以确保将来不会再发生类似的事情。我是否可以验证一个方法中的局部变量使用mockito调用函数的次数 我看到了一些关于使用verify验证模拟对象的调用次数的问题/论坛帖子。但是我实际上没有访问mock这个对象的权限,因为它是在没有传入的方法中创
.getResultsList()
。相反,结果被缓存到列表中
,所有后续代码都与该列表一起工作,只需访问数据库一次,代码就能更高效地运行
我被要求为我修改过的方法创建jUnit测试,以确保将来不会再发生类似的事情。我是否可以验证一个方法中的局部变量使用mockito调用函数的次数
我看到了一些关于使用verify
验证模拟对象的调用次数的问题/论坛帖子。但是我实际上没有访问mock这个对象的权限,因为它是在没有传入的方法中创建的
基本上-
myDao
有一个名为em
的类变量EntityManager
,em.createNamedQuery()
函数存储在TypedQuery
变量q
中。这q
就是多次调用.getResultsList的内容
在我的jUnit测试中,是否可以监听我在模拟Dao上调用的方法内部发生的事情,并确保在方法运行时只调用一次q.getResultsList
更新
我的测试类中的myDao
是使用@Autowired
注释配置的,如下所示:
@Autowired
MyDao myDao;
它在applicationContext.xml中定义如下:
<bean id="myDao" class="org.mockito.Mockito" factory-method="mock">
<constructor-arg value="com.mypackage.myDao"/>
</bean>
我调用的方法在该DAO内部,因此我调用
myDao.myMethod(myVar)
InsidemyMethod
是我想要听的q变量。这是一个局部变量。如果您在模拟myDao,那么您将无法验证myDao中的代码
要测试这一点,需要对myDao类进行测试。在该单元测试中,您可以模拟
EntityManager
,并让createNamedQuery
返回模拟查询。然后,您可以使用mockito的verify
和times(1)
来验证getResultsList()
在模拟查询中只调用了一次。您模拟的对象是什么,您的测试涵盖了什么功能?您是模拟EntityManager
,还是使用真正的DB?@axtavt我更新了这个问题,提供了有关如何配置的更多详细信息。我正在试图找到一种方法来构建一个测试,而不必更改所有以前编写的测试来创建新的模拟对象。现在所有其他的测试都只是简单地使用myDao
和断言
。我真的很担心这是答案,我希望某位SO大师能拿出一些神奇的方法来处理我的问题。或者只是验证一下。默认验证模式为次(1)
,因此您无需写入次(1)
。