作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我发现很难为这个方法编写单元测试,它基本上是在用户键入退出命令时退出程序。
系统退出类:
public class SystemExit {
public void exit(int status) {
System.exit(status);
}
}
我的静态方法:
public static void exitWhenQuitDetected() {
final SystemExit systemExit = new SystemExit();
final String QUIT = "quit";
String line = "";
try {
final InputStreamReader input = new InputStreamReader(System.in);
final BufferedReader in = new BufferedReader(input);
while (!(line.equals(QUIT))) {
line = in.readLine();
if (line.equals(QUIT)) {
System.out.println("You are now quiting the program");
systemExit.exit(1);
}
}
} catch (Exception e) {
System.err.println("Error: " + e.getMessage());
}
}
这里有些地方不太对劲,因为我正在努力对方法 exitWhenQuitDetected 进行单元测试(我正在使用 Mockito 进行模拟)。我将如何模拟 InputStreamReader 并验证 SystemExit.exit 方法在看到退出时被调用?你能解释一下吗?谢谢。
添加了我目前正在进行的测试,它不起作用。
@Test
@Ignore
public void shouldExitProgramWhenTypeQuit() {
String quit = "quit";
SystemExit systemExit = mock(SystemExit.class);
try {
BufferedReader bufferedReader = mock(BufferedReader.class);
when(bufferedReader.readLine()).thenReturn(quit + "\n");
SomeClass.exitWhenQuitDetected();
verify(systemExit, times(1)).exit(1);
} catch (IOException e) {
e.printStackTrace();
}
}
最佳答案
您应该包括 PowerMockito Jars 到你的项目中,而不仅仅是 Vanilla Mockito。 Powermock 库专为模拟静态和/或最终类和方法而设计。
以下this blog post包含描述与您的场景类似的场景的示例代码。
本质上,您需要一个与此类似的测试类...
@RunWith(PowerMockRunner.class)
@PrepareForTest({System.class, ClassToTest.class})
public class SystemExitTest {
@Test
public void shouldCallSystemExit() {
PowerMockito.mockStatic(System.class);
ClassToTest.methodToTest();
PowerMockito.verifyStatic();
System.exit(0);
System.out.println("If this message displays them System.exit() was mocked successfully");
}
}
给定这个简单的实现类...
public class ClassToTest {
public static void methodToTest() {
// do some stuff
System.exit(0);
}
}
关于当用户在控制台中键入 quit 时用于退出程序的 Java 编写单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12234526/
我是一名优秀的程序员,十分优秀!