如何在没有 powermock 的情况下模拟静态方法

How to mock static method without powermock(如何在没有 powermock 的情况下模拟静态方法)
本文介绍了如何在没有 powermock 的情况下模拟静态方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

问题描述

限时送ChatGPT账号..

在 JUnit 中进行测试时,有什么方法可以模拟静态 util 方法吗?

Is there any way we can mock the static util method while testing in JUnit?

我知道 Powermock 可以模拟静态调用,但我不想使用 Powermock.

I know Powermock can mock static calls, but I don't want to use Powermock.

还有其他选择吗?

推荐答案

(不过我假设你可以使用 Mockito)我没有想到任何专门的东西,但是当涉及到这样的情况时,我倾向于使用以下策略:

(I assume you can use Mockito though) Nothing dedicated comes to my mind but I tend to use the following strategy when it comes to situations like that:

1) 在被测类中,将静态直接调用替换为对封装静态调用本身的包级方法的调用:

1) In the class under test, replace the static direct call with a call to a package level method that wraps the static call itself:

public class ToBeTested{

    public void myMethodToTest(){
         ...
         String s = makeStaticWrappedCall();
         ...
    }

    String makeStaticWrappedCall(){
        return Util.staticMethodCall();
    }
}

2) 在测试和模拟封装的包级方法时监视被测类:

2) Spy the class under test while testing and mock the wrapped package level method:

public class ToBeTestedTest{

    @Spy
    ToBeTested tbTestedSpy = new ToBeTested();

    @Before
    public void init(){
        MockitoAnnotations.initMocks(this);
    }

    @Test
    public void myMethodToTestTest() throws Exception{
       // Arrange
       doReturn("Expected String").when(tbTestedSpy).makeStaticWrappedCall();

       // Act
       tbTestedSpy.myMethodToTest();
    }
}

这是我写的一篇关于间谍的文章,其中包括类似的案例,如果您需要更多见解:sourceartists.com/mockito-spying

Here is an article I wrote on spying that includes similar case, if you need more insight: sourceartists.com/mockito-spying

这篇关于如何在没有 powermock 的情况下模拟静态方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!

相关文档推荐

How to send data to COM PORT using JAVA?(如何使用 JAVA 向 COM PORT 发送数据?)
How to make a report page direction to change to quot;rtlquot;?(如何使报表页面方向更改为“rtl?)
Use cyrillic .properties file in eclipse project(在 Eclipse 项目中使用西里尔文 .properties 文件)
Is there any way to detect an RTL language in Java?(有没有办法在 Java 中检测 RTL 语言?)
How to load resource bundle messages from DB in Java?(如何在 Java 中从 DB 加载资源包消息?)
How do I change the default locale settings in Java to make them consistent?(如何更改 Java 中的默认语言环境设置以使其保持一致?)