невозможно разрешить до ошибки типа в модульном тесте - PullRequest
0 голосов
/ 12 декабря 2018

У меня относительно простой модульный тест для тестирования статического метода в моем java-приложении.

@Test(expected=MyException.class)
public void testGetWeightedGradeWithWeightSumLessThan100(){   
   Pair<Integer, Double> gradeOne = Pair.of(10, 80.00);   
   Pair<Integer, Double> gradeTwo = Pair.of(25, 90);
   @SuppressWarnings({"unchecked", "unused"})
   double weightedGrade = GradeUtils.getWeightedGrade(gradeOne, gradeTwo);
}

Это прекрасно работает, и мой тест проходит, как и ожидалось.Однако мне не нужно присваивать вывод getWeightedGrade переменной, так как я ожидаю, что при запуске метода будет сгенерировано исключение.Итак, я попытался обновить модульный тест следующим образом:

@Test(expected=MyException.class)
public void testGetWeightedGradeWithWeightSumLessThan100(){   
   Pair<Integer, Double> gradeOne = Pair.of(10, 80.00);   
   Pair<Integer, Double> gradeTwo = Pair.of(25, 90);
   @SuppressWarnings({"unchecked", "unused"})
   GradeUtils.getWeightedGrade(gradeOne, gradeTwo);
}

Это вызывает ошибку компилятора:

GradeUtils.getWeightedGrade cannot be resolved to a type.

Когда я перемещаю аннотацию suppressWarnings вне тела метода, он компилируетсяхорошо.

@Test(expected=MyException.class)
@SuppressWarnings({"unchecked", "unused"})
public void testGetWeightedGradeWithWeightSumLessThan100(){   
   Pair<Integer, Double> gradeOne = Pair.of(10, 80.00);   
   Pair<Integer, Double> gradeTwo = Pair.of(25, 90);
   GradeUtils.getWeightedGrade(gradeOne, gradeTwo);
}

Это не имеет большого значения, мне просто интересно, почему он не компилируется при удалении объявления переменной.

Спасибо

1 Ответ

0 голосов
/ 12 декабря 2018

В java-документах вы можете видеть, что флаг @SurpressWarnings работает только на

  • Тип
  • Поле
  • Метод
  • Параметр
  • Конструктор
  • Local_variable

Но без double weightedGrade = ..., который вы пытаетесь использовать на method-call , который не является допустимой целью.

Причина, по которой он работает для двойного объявления, заключается в том, что он является локальной переменной.И это работает до объявления метода, потому что это также допустимая цель.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...