JUnit测试异常测试正在获取Null异常而不是Input Exception

时间:2019-01-30 07:18:50

标签: java unit-testing junit qa

下面是我的代码的修改版本(上一堂课,不想冒险 我严谨,积极主动的教授,以为我窃)

基本上,我用扫描仪创建了一个类,我只希望它接受正双精度。我使用了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参数。我正在阅读注释,这听起来像创建模拟扫描仪将是最好的选择?

谢谢您到目前为止的所有帮助。还在学习!

2 个答案:

答案 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