我坚持使用需要用户输入的测试方法。以下是我在IOHandler类中的方法:
Callable<Integer> getNumber = new Callable<Integer>() {
@Override
public Integer call() throws Exception {
try {
return scanner.nextInt();
} catch (InputMismatchException e) {
writeOut("Bad params !\n");
scanner.nextLine();
}
return call();
}
};
Optional<Object> handleIOAndGetInput(Callable function) {
try {
return Optional.ofNullable(function.call());
} catch (IOException e) {
System.err.println("Stream doesn't work");
e.printStackTrace();
System.exit(1);
} catch (Exception e) {
System.err.println("Something went wrong");
e.printStackTrace();
System.exit(1);
}
return Optional.empty();
}
这是我的Test类中的方法:
@Test
public void shouldTakeUserInput() {
IOHandler ioHandler=new IOHandler();
Assert.assertEquals((ioHandler.handleIOAndGetInput(ioHandler.getNumber)).orElse(null), 5);
}
所以我发了一些类似的帖子,但我找不到问题的答案。我所做的一切都是关于将输入伪装成断言,但在我的情况下,我必须在Callable getNumber中输入这个扫描仪。期待有关它的任何提示。提前致谢!
答案 0 :(得分:0)
不幸的是,这是一个需要存储信息或使用将为其存根的框架的实例
尝试Mockito
这是java dev的正常问题。