下面是我的代码的修改版本(上一堂课,不想冒险 我严谨,积极主动的教授,以为我窃)
基本上,我用扫描仪创建了一个类,我只希望它接受正双精度。我使用了try catch和InputMismatchException来实现这一点。
但是,任务的重点是单元测试。下面的单元测试抛出了空指针异常(这是有道理的,因为null是一个参数),但是我不确定如何修改它以测试输入不匹配异常。
@Test (expected = InputMismatchException.class)
public void input_test() {
myClass instance = new myClass();
myclass.someNum(null, 0);
}
我的IDE坚持要为第一个参数使用null(我猜是因为我使用了扫描仪?),但我希望它可以是非双精度的。以下是我正在为此考试借鉴的主要课程的摘录。
public static double someNum(Scanner sc, double measure) {
measure = sc.nextDouble();
try{
if (measure <=0) {
System.out.println("Entry needs to be greater than 0");
}
} catch(InputMismatchException e){
System.err.printf("Input Exception: Please enter a positive numerical digit and try again %n ");
sc.next();
}
return measure;
}
}
很抱歉,如果信息太长或缺少信息,这是我的第一个问题
编辑:感谢您的澄清和提示。我为someNum添加了整个方法。最终,我认为我想用无效的输入(例如字符串等)替换测试中的null参数。我正在阅读注释,这听起来像创建模拟扫描仪将是最好的选择?
谢谢您到目前为止的所有帮助。还在学习!
答案 0 :(得分:0)
您应该准备一个有效的Scanner
对象。
幸运的是,有一个接受字符串的构造函数,您可以在其中自由传递任何值。
在您的情况下要测试一种情况,即您的代码在传递不为double值的情况下应该失败,请具有以下代码:
@Test(expected = InputMismatchException.class)
public void input_test() {
Scanner scanner = new Scanner("abra-kadabra");
myClass.someNum(scanner, 0.0);
}
顺便说一句,如果您有静态方法,则不应创建类的对象。
答案 1 :(得分:0)
要给您一个更准确的答案,您需要提供someNum
方法。
没有这些信息,我只能告诉您在抛出sc
之前正在使用InputMismatchException
变量。可能是这样的:
while (sc.hasNextDouble()) { ... }
该行运行时,将抛出NullPointerException
。
您的教授可能希望someNum
在使用之前先检查sc
是否为null
。