我有一个类在它的一些方法中使用
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”方法。有什么办法可以嘲笑它吗?
您可以使用PowerMockito和mockStatic方法来做到这一点。
这个想法是模拟静态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)