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

新手上路,请多包涵

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

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

有没有其他选择?

原文由 gati sahu 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 537
1 个回答

(虽然我假设你可以使用 Mockito)我没有想到什么专门的,但在遇到这种情况时,我倾向于使用以下策略:

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

 public class ToBeTested{

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

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

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

 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

原文由 Maciej Kowalski 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题