带参数的模拟方法



我试图模拟下面的行,但它在执行它时给出了一个错误,它说:

此处检测到放错位置的参数匹配器:

不能在验证或存根之外使用参数匹配器。

正确使用参数匹配器的示例:

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 个简单、快速和安全的步骤:

  1. 创建该方法的非静态副本(使用新名称):

    class StaticMethodRefactoring {
    static int staticMethod(int b) {
    return b;
    }
    int nonStaticMethod(int b) {
    return b;
    }
    }
    
  2. 让静态版本
  3. 调用非静态版本:

    class StaticMethodRefactoring {
    static int staticMethod(int b) {
    return new StaticMethodRefactoring(). nonStaticMethod(b);
    }
    int nonStaticMethod(int b) {
    return b;
    }
    }
    
  4. 使用 IDE 的内联方法重构将静态访问替换为非静态访问。

    很可能有一个选项可以删除该方法的旧静态版本。如果其他一些项目使用这种静态方法,你可以保留它......

    IDE 还在访问静态方法的位置提供内联方法功能。这样,您可以根据需要逐步更改为非静态访问。

就是这样!

在当前 IDE 会话中的所有打开项目中,将对静态方法的任何访问都替换。现在您可以更改待测试的类,以通过构造函数或任何其他 DI 机制注入实例,并用简单的模拟模拟替换测试...

相关内容

  • 没有找到相关文章

最新更新