Mockito doNothing with Mockito.

i34xakig  于 11个月前  发布在  其他
关注(0)|答案(2)|浏览(67)

我使用Mockito,沿着mockito-inline来模拟静态方法。我试图将doNothing或类似的行为应用于静态void方法。下面的解决方法是可行的,但我认为应该有一种更方便的方法来用更少的代码实现这一点。

try (MockedStatic<UtilCalss> mock = Mockito.mockStatic(UtilCalss.class)) {

     mock.when(() -> UtilCalss.staticMethod(any()))
            .thenAnswer((Answer<Void>) invocation -> null);

}

字符串
如果它是一个非静态方法,我们可以简单地做:

doNothing().when(mock).nonStaticMethod(any());


但是我想对静态方法做同样的事情。

xienkqul

xienkqul1#

你不需要给那个电话打存根。
doNothing是在mock上调用的void方法的默认行为。
示例如下:
受试类别:

public class UtilClass {
    public static void staticMethod(String data) {
        System.out.println("staticMethod called: " + data);
    }
}

字符串
测试代码:

public class UtilClassTest {
    @Test
    void testMockStaticForVoidStaticMethods() {
        try (MockedStatic<UtilClass> mockStatic = Mockito.mockStatic(UtilClass.class)) {
            UtilClass.staticMethod("inMockStaticScope");
        }
        UtilClass.staticMethod("outOfMockStaticScope");
    }
}


输出量:

staticMethod called: outOfMockStaticScope

n7taea2i

n7taea2i2#

mockito-inline包括mockito-core:

<!-- Mockito-inline include Mockito-code in same version - Useful for Mock static method -->
        <!-- See https://asolntsev.github.io/en/2020/07/11/mockito-static-methods/ -->
        <dependency>
            <groupId>org.mockito</groupId>
            <artifactId>mockito-inline</artifactId>
            <version>3.6.28</version>
        </dependency>

字符串
如果你正在测试的静态方法返回nothing =>,不要使用mock.when =>,只执行你想要测试和验证的方法:

try (MockedStatic<UtilClass> mock = Mockito.mockStatic(UtilClass.class)) {

     mock.when(() -> UtilClass.staticMethod(any()))
            .thenAnswer((Answer<Void>) invocation -> null);

     App.main(null); // example : I'm testing main method from App class

     mock.verify(UtilClass::staticMethod); // I verify static method from UtilClass was called.

}

资源

相关问题