gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 07:07:22 26 4
gpt4 key购买 nike

我正在对 DAO 进行一些修改。修改包括重构一些代码,以防止多个方法多次调用 .getResultsList()。相反,结果会缓存到列表中,并且所有后续代码都与该列表一起使用,从而使代码只需访问数据库一次即可更有效地运行。

我被要求为我修改的方法创建 jUnit 测试,以确保将来不会再发生类似的事情。我是否可以验证方法内的局部变量使用mockito调用函数的次数?

我见过一些关于使用 verify 来验证对模拟对象进行的调用次数的问题/论坛帖子。但我实际上无权模拟该对象,因为它是在方法内创建的,但没有传入。

基本上 -

myDao 有一个名为 em 的类变量 EntityManagerem.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); 内部 myMethod 是我想要监听的 q 变量到。这是一个局部变量。

最佳答案

如果您正在 mock myDao,那么您将无法验证 myDao 中的代码。

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

关于java - 使用 Mockito 或 jUnit 验证方法内的调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15934238/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com