无法使用PowerMock模拟java.lang.System#exit(int)方法

时间:2019-01-05 20:17:00

标签: java testng powermock powermockito

我的应用程序有一个流程,最后它的方法System.exit(int)被调用。

我正在尝试通过使用TestNG进行测试来测试此流程。

但是,在运行测试时,尽管测试已完成,但我还是收到了一条奇怪的消息:

enter image description here

只是为了找到根本原因,我从实际流程中删除了System.exit(int),并按预期通过了测试,所以这里的问题是System.exit(int)方法。

为了解决此问题,我尝试模拟有问题的方法,但找不到正确的方法。这是我所做的

  1. 我在测试类的java.lang.System.class下添加了@PrepareForTest
  2. 在测试中添加了PowerMockito.mockStatic(java.lang.System.class)
  3. 我尝试了两种方法来模拟该方法:

    a。

        PowerMockito.replace(PowerMockito.method(System.class, "exit", int.class))
        .with((proxy, method, args) -> null);
    

    以这种方式运行时,似乎模拟无法正常工作,因为在测试结束时,我得到的消息与在System.exit(int)上未应用任何模拟时得到的消息相同。

    < / li>

enter image description here

b。

PowerMockito.doNothing().when(System.class, "exit", Mockito.any());

通过这种方式,我在测试开始时就得到了这个异常:

org.powermock.reflect.exceptions.MethodNotFoundException: No method found with name 'exit' with parameter types: [ <none> ] in class java.lang.System.

我已经以这种方式嘲笑了一些方法,不确定为什么使用System.exit(int)不能正常工作。

有什么想法吗? 谢谢

0 个答案:

没有答案