Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.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 使用Mockito或jUnit验证方法内的调用_Java_Spring_Junit_Mockito - Fatal编程技术网

Java 使用Mockito或jUnit验证方法内的调用

Java 使用Mockito或jUnit验证方法内的调用,java,spring,junit,mockito,Java,Spring,Junit,Mockito,我正在对DAO进行一些修改。这些修改包括重构一些代码,以防止一些方法多次调用.getResultsList()。相反,结果被缓存到列表中,所有后续代码都与该列表一起工作,只需访问数据库一次,代码就能更高效地运行 我被要求为我修改过的方法创建jUnit测试,以确保将来不会再发生类似的事情。我是否可以验证一个方法中的局部变量使用mockito调用函数的次数 我看到了一些关于使用verify验证模拟对象的调用次数的问题/论坛帖子。但是我实际上没有访问mock这个对象的权限,因为它是在没有传入的方法中创

我正在对DAO进行一些修改。这些修改包括重构一些代码,以防止一些方法多次调用
.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)
Inside
myMethod
是我想要听的q变量。这是一个局部变量。

如果您在模拟myDao,那么您将无法验证myDao中的代码


要测试这一点,需要对myDao类进行测试。在该单元测试中,您可以模拟
EntityManager
,并让
createNamedQuery
返回模拟查询。然后,您可以使用mockito的
verify
times(1)
来验证
getResultsList()
在模拟查询中只调用了一次。

您模拟的对象是什么,您的测试涵盖了什么功能?您是模拟
EntityManager
,还是使用真正的DB?@axtavt我更新了这个问题,提供了有关如何配置的更多详细信息。我正在试图找到一种方法来构建一个测试,而不必更改所有以前编写的测试来创建新的模拟对象。现在所有其他的测试都只是简单地使用
myDao
断言
。我真的很担心这是答案,我希望某位SO大师能拿出一些神奇的方法来处理我的问题。或者只是
验证一下
。默认验证模式为
次(1)
,因此您无需写入
次(1)