С этим кодом так много проблем.
Первый технический ответ: вы, кажется, не знаете, что делаете. У вас есть @PrepareForTest({PathTest.class })
, что означает, что вы намереваетесь смоделировать статический метод этого класса.
Но тогда вы не делаете то, что необходимо для насмешки над статическим методом в этом классе. Просто следуйте их документации шаг за шагом. Я также думаю, что URL-класс является окончательным, поэтому вам необходимо подготовить и аннотировать этот класс, чтобы его можно было использовать с whenNew ()!
Но тогда: вам следует избегать поддельных объектов URL или URL-соединений. Просто используйте какое-либо внедрение зависимостей и убедитесь, что вы можете передать какой-то макетированный экземпляр в тестируемый код, например, используя аннотацию @InjectMocks для Mockito. Оттуда вы также можете избежать использования static метода.
Короче говоря: ваш рабочий код написан плохо, а ваш модульный тест (честно) просто ужасен. Вы должны серьезно отойти назад и выбросить все это. Затем переосмыслите свой производственный код, чтобы не использовал new
напрямую, и чтобы не полагаться на статические методы. Таким образом, вы можете избавиться от PowerMockito, вы идете с обычным Mockito (ну, вы должны включить насмешку над финальными классами). Но будьте уверены: использование PowerMock (ito) не имеет смысла, если в этом нет необходимости.
А потом: не "придумывайте" издевательский код. Прочитайте учебные пособия и следуйте им шаг за шагом. В вашем тестовом примере вы издеваетесь, как все , но вы должны делать прямо противоположное: вы только издеваетесь, когда совсем нет другого способа проверить ваш код. И вы абсолютно не делаете метод статичным, когда это лишает вас возможности проводить модульное тестирование кода.
(статика имеет свое место, но когда она встает у вас на пути, вы делаете не то!)