使用Scanner和System.in(Java)对方法进行Junit测试
我是编程新手,我有一个简单的方法:使用Scanner和System.in(Java)对方法进行Junit测试,java,junit,java.util.scanner,system.in,Java,Junit,Java.util.scanner,System.in,我是编程新手,我有一个简单的方法: public double input() { double result = 0; Scanner scanner = new Scanner(System.in); if (scanner.hasNextDouble()) { result = scanner.nextDouble(); } else { System.out.print("Pl
public double input() {
double result = 0;
Scanner scanner = new Scanner(System.in);
if (scanner.hasNextDouble()) {
result = scanner.nextDouble();
} else {
System.out.print("Please, type numbers!\n");
}
return result;
}
问题是如何在junit测试中模拟(模拟)用户从键盘输入。将
扫描仪作为输入参数传递给要测试的方法。
在测试代码中,您可以从字符串创建扫描程序实例:
Scanner scanner = new Scanner("the sample user input");
然后在生产代码中,您可以将新扫描仪(System.in)
传递给该方法。您应该了解更多信息
你的课程不应该与其他课程紧密结合。可以根据需要在多个级别为对象提供依赖关系
如果是字段,则使用构造函数/设置器
如果范围仅在方法中,则使用方法参数
就你而言,只要你说:-
Scanner scanner = new Scanner(System.in);
现在,您的代码与流中的系统完全耦合。相反,您应该以下面的格式将其作为参数注入到方法中
public double input(InputStream inputStream) {
double result = 0;
Scanner scanner = new Scanner(inputStream);
if (scanner.hasNextDouble()) {
result = scanner.nextDouble();
} else {
System.out.print("Please, type numbers!\n");
}
return result;
}
现在,您可以从主代码中使用System.in
调用它。从测试类中,可以使用任何InputStream调用它。我们通常使用mock/stub
注意:-上面只是一个示例,可以根据需要进行更改