当我测试这个静态方法时
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
。我的问题是:
- 当所有参数都使用匹配器时,为什么会出现此异常?如何解决?我已经调试过了,发现
isA(Log.class)
返回为空。 - 当我将
@PrepareForTest
注释添加到测试类并运行测试时,junit 没有响应。为什么?
编辑
我试图不使用参数匹配器,并得到
org.mockito.exceptions.misusing.MissingMethodInvocationException: when() 需要一个参数,该参数必须是“模拟的方法调用”。例如:when(mock.getArticles()).thenReturn(articles);
此外,可能会出现此错误,因为:
你存根其中之一:final/private/equals()/hashCode() 方法。这些方法不能被存根/验证。
在 when() 中,您不会在模拟上调用方法,而是在其他对象上调用方法。
在 ...
所以这似乎是由于它someMethod
本身。方法中有同步块。我想知道 Powermockito 是否可以模拟这种方法。