我正在尝试模拟下面的行,但在执行时会出错,它说:
此处检测到错位的参数匹配器:
您不能在验证或存根之外使用参数匹配器。
正确使用参数匹配器的示例:
当(mock.get(anyInt()))thenReturn(空);
doThrow(new RuntimeException())。when(mock).someVoidMethod(anyObject());
验证(模拟).someMethod(含有( “foo” 的))
此外,此错误可能会显示,因为您使用参数匹配器 无法模拟的方法。以下方法不能 stubbed / verified:final / private / equals()/ hashCode()。
org.mockito.exceptions.misusing.InvalidUseOfMatchersException: 代码行是:
PowerMockito.mockStatic(NameOfClass.class);
expect( NameOfClass.nameOfMethod((URL)Mockito.any(),Mockito.anyString())).andReturn(actualOutput);
这个班有点像这样:
public class SomeClass {
public static String method(String URL, String str) {
//functioning
return "";
}
}
我该如何嘲笑它?
答案 0 :(得分:1)
您可以在Mockito上使用PowerMockito。像这样:
PowerMockito.mockStatic(NameOfClass.class);
expect( NameOfClass.nameOfMethod((URL)Mockito.any(),Mockito.anyString())).andReturn(actualOutput);
答案 1 :(得分:1)
我无法改变代码中的内容.....它是一个旧代码,并在许多地方使用 - NealGul
而不是使用Powermock:
有3个简单,快速和安全的步骤:
创建该方法的非静态副本(使用新名称):
class StaticMethodRefactoring {
static int staticMethod(int b) {
return b;
}
int nonStaticMethod(int b) {
return b;
}
}
让静态版本调用非静态版本:
class StaticMethodRefactoring {
static int staticMethod(int b) {
return new StaticMethodRefactoring(). nonStaticMethod(b);
}
int nonStaticMethod(int b) {
return b;
}
}
使用IDE的内联方法重构将静态访问替换为非静态访问。
最有可能删除该方法的旧静态版本。如果其他一些项目使用这种静态方法,你可以保留它......
您的IDE还在您访问静态方法的位置提供内联方法功能。这样,您可以根据需要逐步更改为非静态访问。
那就是它!
在当前IDE会话的所有打开项目中,将替换对静态方法的任何访问。现在你可以改变你的 class in test 来获取通过构造函数或任何其他DI机制注入的实例,并用一个简单的 mockito -mock替换测试...