首页 > 解决方案 > 如何模拟带有参数和字符串返回类型的静态方法?

问题描述

使用 Mockito-inline (3.12.4) 并遵循https://javadoc.io/doc/org.mockito/mockito-core/latest/org/mockito/Mockito.html#static_mocks中的文档

<dependency>
            <groupId>org.mockito</groupId>
            <artifactId>mockito-inline</artifactId>
            <version>3.12.4</version>
            <scope>test</scope>
        </dependency>

但仍然出现以下错误:

org.mockito.exceptions.misusing.MissingMethodInvocationException: 
when() requires an argument which has to be 'a method call on a mock'.
For example:
 when(mock.getArticles()).thenReturn(articles);

Also, this error might show up because:
1. you stub either of: final/private/equals()/hashCode() methods.
Those methods *cannot* be stubbed/verified.
Mocking methods declared on non-public parent classes is not supported.
2. inside when() you don't call method on mock but on some other object.

 public class StaticCLass extends SuperStaticCLass {
 //... some methods  
}

public class SuperStaticClass {

public static String getSomeStringAfterSomeProcess(SomeObject object) 
{
   return SomeProcess.process(object);
}
}
  

我的代码将如下所示:

try (MockedStatic<StaticCLass> mocked = Mockito.mockStatic(StaticCLass.class)) {
        mocked.when(() -> StaticCLass.getSomeStringAfterSomeProcess(param))
                .thenReturn("Some Value");
    }

标签: javamockito

解决方案


推荐阅读