Вы можете сделать это так же, как вы делаете это с Mockito в реальных случаях. Например, вы можете связать заглушки, следующая строка заставит первый вызов ничего не делать, затем второй и будущий вызов getResources
сгенерирует исключение:
// the stub of the static method
doNothing().doThrow(Exception.class).when(StaticResource.class);
StaticResource.getResource("string");
// the use of the mocked static code
StaticResource.getResource("string"); // do nothing
StaticResource.getResource("string"); // throw Exception
Благодаря замечанию Мэтта Лахмана, обратите внимание, что если ответ по умолчанию не изменяется во время создания макета, по умолчанию макет ничего не будет делать. Следовательно, написание следующего кода эквивалентно тому, что вы его не пишете.
doNothing().doThrow(Exception.class).when(StaticResource.class);
StaticResource.getResource("string");
Несмотря на это, коллегам, которые будут читать тест, может быть интересно, что вы ничего не ожидаете от этого конкретного кода. Конечно, это может быть адаптировано в зависимости от того, как воспринимается понятность теста.
Кстати, по моему скромному мнению, вам следует избегать насмешливого статического кода, если вы создаете новый код. В Mockito мы думаем, что это, как правило, намек на плохой дизайн, это может привести к плохому обслуживанию кода. Хотя существующий унаследованный код - это еще одна история.
Вообще говоря, если вам нужно смоделировать закрытый или статический метод, то этот метод делает слишком много и его следует выводить из объекта, который будет введен в тестируемый объект.
Надеюсь, это поможет.
Привет