Тест исключения JUnit test получает Null Exception вместо Input Exception - PullRequest
0 голосов
/ 30 января 2019

Ниже приведена модифицированная версия моего кода (посещаю занятия и не хочу рисковать моим строгим, активным профессором, думая, что я плагиат)

По сути, я создал класс со сканером, и я толькохочу, чтобы он принимал положительные двойники.Для этого я использовал триггер try и InputMismatchException.

Тем не менее, в центре внимания задания находится модульное тестирование.В приведенном ниже модульном тесте генерируется исключение нулевого указателя (имеет смысл, поскольку нулевое значение является параметром), но я не уверен, как его изменить, чтобы вместо этого проверить исключение входного несоответствия.

 @Test (expected = InputMismatchException.class)
   public void input_test() {   
   myClass instance = new myClass();
   myclass.someNum(null, 0);
   }

My IDEнастаивает на том, чтобы я использовал нулевое значение для первого параметра (полагаю, поскольку я использовал сканер?), но я хочу, чтобы он был не двойным.Ниже приведен фрагмент моего основного класса, который я рисую для этого теста.

       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.В конечном счете, я думаю, что я хотел бы заменить нулевой параметр в тесте недопустимым вводом, таким как строка и т. Д. Я читал комментарии, и кажется, что лучше всего было бы создать пробный сканер?

Спасибо за всю вашу помощь до сих пор.Все еще учусь!

Ответы [ 2 ]

0 голосов
/ 30 января 2019

Чтобы дать вам более точный ответ, вам необходимо предоставить метод someNum.

Без этой информации я могу только сказать, что переменная sc используется до * 1005.* брошен.Вероятно, что-то вроде этого:

while (sc.hasNextDouble()) { ... }

Когда эта строка запускается, выдается NullPointerException.

Ваш профессор, вероятно, хочет someNum проверить, является ли sc nullпрежде чем использовать его.

0 голосов
/ 30 января 2019

Вы должны подготовить действительный Scanner объект.К счастью, есть конструктор, принимающий строку, в которой вы можете свободно передавать любое значение.

В вашем случае для тестирования случая, когда ваш код должен был завершиться с ошибкой, когда передано не двойное значение, есть следующее:

@Test(expected = InputMismatchException.class)
public void input_test() {
    Scanner scanner = new Scanner("abra-kadabra");
    myClass.someNum(scanner, 0.0);
}

Кстати, если у вас есть статический метод, вы не должны создавать объект вашего класса.

...