我试图模拟下面的行,但它在执行它时给出了一个错误,它说:
此处检测到放错位置的参数匹配器:
不能在验证或存根之外使用参数匹配器。
正确使用参数匹配器的示例:
when(mock.get(anyInt())).thenReturn(null);
doThrow(new RuntimeException()).when(mock).someVoidMethod(anyObject());
verify(mock).someMethod(contains("foo"))
此外,此错误可能会出现,因为您使用参数匹配器 不能嘲笑的方法。以下方法不能存根/已验证: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 "";
}
}
我怎么能模拟它?
您可以在 Mockito之上使用 PowerMockito。像这样:
PowerMockito.mockStatic(NameOfClass.class);
expect( NameOfClass.nameOfMethod((URL)Mockito.any(),Mockito.anyString())).andReturn(actualOutput);
我无法更改代码中的内容.....这是一个旧代码,在很多地方都在使用 – 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 会话中的所有打开项目中,将对静态方法的任何访问都替换。现在您可以更改待测试的类,以通过构造函数或任何其他 DI 机制注入实例,并用简单的模拟模拟替换测试...