gpt4 book ai didi

java - PowerMockito : got InvalidUseOfMatchersException when use matchers mocking static method

转载 作者:搜寻专家 更新时间:2023-10-31 20:29:59 25 4
gpt4 key购买 nike

当我测试这个静态方法时

public class SomeClass {
public static long someMethod(Map map, String string, Long l, Log log) {
...
}
}

import org.apache.commons.logging.Log;

@RunWith(PowerMockRunner.class)
//@PrepareForTest(SomeClass.class)
public class Tests {
@Test
public void test() {
...
PowerMockito.mockStatic(SomeClass.class);
Mockito.when(SomeClass.someMethod(anyMap(), anyString(), anyLong(), isA(Log.class))).thenReturn(1L);
...
}
}

我遇到了 InvalidUseOfMatchersException。我的问题是:

  1. 为什么当所有参数都使用匹配器时我会得到这个异常?如何解决?我已经调试过了,发现 isA(Log.class) 返回 null。
  2. 当我将 @PrepareForTest 注释添加到测试类并运行测试时,junit 没有任何响应。为什么?

编辑

我试着不使用参数匹配器,结果得到了

org.mockito.exceptions.misusing.MissingMethodInvocationException: when() requires an argument which has to be 'a method call on a mock'. For example: when(mock.getArticles()).thenReturn(articles);

Also, this error might show up because:

  1. you stub either of: final/private/equals()/hashCode() methods. Those methods cannot be stubbed/verified.

  2. inside when() you don't call method on mock but on some other object.

at ...

所以这似乎是由于 someMethod 本身。方法中有synchronized block 。我想知道 Powermockito 是否可以模拟这种方法。

最佳答案

像这样尝试将 isA() 替换为另一个 any() 调用

Mockito.when(SomeClass.someMethod(anyMap(), anyString(), anyLong(), any(Log.class))).thenReturn(1L);

[编辑]

当你得到异常时检查你的堆栈跟踪。您是否看到报告了任何 NoClassDefFoundError?我注意到当我没有在我的项目中包含 javassist.jar 时,我遇到了与您类似的错误。

我使用 PowerMockito,这些是我添加到全新项目中以运行 @Tom 发布的代码的 jar

  • powermock-mockito-1.4.10-full.jar
  • mockito-all-1.8.5.jar
  • javassist-3.15.0-GA.jar
  • junit-4.8.2.jar
  • common-logging-1.1.1.jar

检查您是否使用兼容的 JAR 版本以及检查您的项目类路径中是否存在任何其他冲突的 JAR 始终是一个好主意。

关于java - PowerMockito : got InvalidUseOfMatchersException when use matchers mocking static method,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10828843/

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