У меня была аналогичная проблема с использованием powermock 1.5.1 и класс файлов и подозреваю, что есть проблема статического насмешливый некоторые/все классы jdk1.7 , хотя я не знаю, почему. Я также проверил вариант javassist и в то время, когда он был последним (3.18.0-GA),
Я удалил свой класс под тест только в строку «Файлы», и он все еще не работал. Затем я решил попытаться высмеять еще один статический класс StringUtils.chop («string»); (commons-lang3), а затем мой силовой тест работал, и я смог заставить его генерировать исключение из mock.
Это доказало мне, что я сделал все по книге, и это статическое издевательство не работало над классом Files, но оно было сделано на StringUtils.
Кстати, я изменил оба метода: @PrepareForTest и PowerMockito.mockStatic() для ссылки на правильный класс.
В итоге я отказался от насмешливых Файлов. Просто хедз-ап на случай, если у кого-то другая проблема.
EDIT. Получил его работу: С тех пор я попробовал это снова, поскольку мне это нужно в другом проекте. Существует более новая версия PowerMock out (1.5.3), в которой используется обновленный javassist (3.18.1-GA), который исправляет ошибку, о которой я упоминал в своем ответе на другой комментарий.
я могу последовательно получить Осмеяние Files
работать, добавив класс испытываемого к @PrepareForTest
, а также Files
теперь даже если классу тестируемые не подвергать статические методы. Мне не нужно было делать это раньше для других статических насмешек. Я не знаю, зачем это нужно или работает по-другому для Files
.
Пример:
public class MyTestClass {
public void justToTestMocking(Path path) throws IOException {
if (!Files.exists(path)) {
throw new IllegalArgumentException("I know there is a deleteIfExists() but I am just testing mocking");
}
Files.delete(path);
}
}
И тест ниже:
@RunWith(PowerMockRunner.class)
@PrepareForTest({Files.class, MyTestClass.class})
public class MyTestClassTest {
@Before
public void setUp() {
mockStatic(Files.class);
}
@Test
public void justToTestMocking_WillDeletePath() throws IOException {
Path path = mock(Path.class);
MyTestClass test = new MyTestClass();
when(Files.exists(path)).thenReturn(true);
test.justToTestMocking(path);
verifyStatic();
Files.delete(path);
}
}
КСТАТИ Я получаю NoSuchFileException. – Stainedart