Runtime.getRuntime().exec jUnit 测试

Pan*_*nos 5 java unit-testing

我有一个类在它的一些方法中使用

Runtime.getRuntime().exec ...
Run Code Online (Sandbox Code Playgroud)

例如:

public class MyClass {
    public void doSomething() {
        ...do something...
        Runtime.getRuntime().exec ...
        ...do something else
    }
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,由于某些要求,我无法“重构”该课程。我想在这个类上创建 jUnit 测试,我发现很难模拟 Runtime 类。

假设我想在运行时进程返回 X 结果或 Y 结果的情况下测试“doSomething”方法。有什么办法可以嘲笑它吗?

Nir*_*evy 4

您可以使用PowerMockitomockStatic方法来做到这一点。

这个想法是模拟静态Runtime.getRuntime()方法以返回模拟的运行时对象,并且您可以控制结果exec()

@RunWith(PowerMockRunner.class)
@PrepareForTest(Runtime.class)
public class TestClass {

  @Mock private Runtime mockRuntime;

  @Test
  public void test() {
    PowerMockito.mockStatic(Runtime.class);

    when(Runtime.getRuntime()).thenReturn(mockRuntime);
    when(mockRuntime.exec()).thenReturn("whatever you want");

    // do the rest of your test
  }
}
Run Code Online (Sandbox Code Playgroud)