参数

时间:2017-05-19 06:30:17

标签: java mockito

我正在尝试模拟下面的行,但在执行时会出错,它说:

  

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

     

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

     

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

     

当(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 "";
    }
}

我该如何嘲笑它?

2 个答案:

答案 0 :(得分:1)

您可以在Mockito上使用PowerMockito。像这样:

PowerMockito.mockStatic(NameOfClass.class);
expect( NameOfClass.nameOfMethod((URL)Mockito.any(),Mockito.anyString())).andReturn(actualOutput);

答案 1 :(得分:1)

  

我无法改变代码中的内容.....它是一个旧代码,并在许多地方使用 - NealGul

而不是使用Powermock:

在代码库中的许多地方引用静态方法时如何将静态方法转换为非静态方法?

有3个简单,快速和安全的步骤:

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

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

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

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

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

  4. 那就是它!

    在当前IDE会话的所有打开项目中,将替换对静态方法的任何访问。现在你可以改变你的 class in test 来获取通过构造函数或任何其他DI机制注入的实例,并用一个简单的 mockito -mock替换测试...