Mockito测试:如何验证带参方法是否被调用(无需校验参数)
验证方法调用时忽略参数的Mockito解决方案
当然可以!Mockito提供了参数匹配器,让你能轻松验证方法是否被调用,完全不用关心传入的具体参数值。
先提个小细节:你原代码里someMethods方法中,val result2 = method2(result)这里的result应该是result1吧?估计是笔误,先纠正一下避免测试时出问题:
class MyClass { def someMethods(): Unit = { val result1 = method1() val result2 = method2(result1) // 修正参数名 } // 假设这两个方法是公开的(否则spy无法拦截调用) def method1(): String = "default" def method2(input: String): Unit = {} }
回到你的核心需求,要验证method2被调用但不关心参数,只需要用Mockito的any()参数匹配器即可。修改你的测试代码如下:
import org.mockito.ArgumentMatchers._ import org.mockito.Mockito._ import org.junit.Test class TestMyClass { @Test def testSomeMethods(): Unit = { val myClass = new MyClass() val myClassSpy = spy(myClass) myClassSpy.someMethods() // 验证method1被调用 verify(myClassSpy).method1() // 验证method2被调用,完全忽略传入的参数 verify(myClassSpy).method2(any()) } }
补充说明:
- 如果
method2的参数有明确类型(比如是Int),你可以用更精准的匹配器,比如anyInt()、anyString(),这样能避免意外匹配到其他类型参数的重载方法。 - 如果你还想验证调用次数,比如确保
method2只被调用一次,可以加上times(1):verify(myClassSpy, times(1)).method2(any()) - 注意要导入Mockito的参数匹配器,通常是
org.mockito.ArgumentMatchers._或者org.mockito.Mockito._(不同版本可能略有差异)。
这样就能实现你想要的「仅验证method2是否被调用,无需关注参数」的需求啦!
内容的提问来源于stack exchange,提问作者Unicorni
相关产品推荐
相关产品推荐

