【问题标题】:Mockito doNothing with Mockito.mockStaticMockito doNothing 与 Mockito.mockStatic
【发布时间】:2021-02-19 08:49:51
【问题描述】:

我正在使用 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());

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

【问题讨论】:

    标签: mockito junit5


    【解决方案1】:

    您不需要存根该调用。

    doNothing 是在模拟上调用的 void 方法的默认行为。

    【讨论】:

    • 你能提供一个如何让它工作的例子吗?至少问题中的上述示例不起作用。
    【解决方案2】:

    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>
    

    如果您正在测试的静态方法没有返回任何内容 => 不要使用 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.
    
    }
    

    资源

    【讨论】:

      猜你喜欢
      • 2014-09-21
      • 2021-02-04
      • 2023-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多