Я пытаюсь издеваться над методом, который создает локальную переменную, пытается что-то и выполняет регистрацию, если генерируется исключение. Вот фрагмент кода:Mocking with JMockit throws NullPointerException для локальных переменных внутренних классов
public void myFunction() {
//Some stuff
try {
new File("foo").getAbsoluteFile();
} catch (SecurityException e) {
//Do some logging
}
}
Я хотел бы, чтобы дразнить это поведение протоколирования с использованием JMockit (с использованием версии 1.8, если это имеет значение). Таким образом, я создал следующий тест:
@Test(expected=SecurityException.class)
public void testAbsoluteFile(
@Injectable final File file
) throws IOException {
new Expectations(File.class){{
new File(anyString);
result = file;
file.getAbsoluteFile();
result = new SecurityException();
}};
myFunction();
}
Беда в том, что это, кажется, дает мне NullPointerException
на внутренней работе File.getAbsoluteFile()
, которые я нахожу абсолютно причудливым:
java.lang.Exception: Unexpected exception, expected<java.lang.SecurityException> but was<java.lang.NullPointerException>
Caused by: java.lang.NullPointerException
at java.io.Win32FileSystem.slashify(Win32FileSystem.java:56)
at java.io.Win32FileSystem.resolve(Win32FileSystem.java:330)
at java.io.File.getAbsolutePath(File.java:556)
at java.io.File.getAbsoluteFile(File.java:572)
at com.vue.rescoreservice.ExpectationTest.myFunction(ExpectationTest.java:39)
at com.vue.rescoreservice.ExpectationTest.testAbsoluteFile(ExpectationTest.java:33)
Это кажется очень странным, как он говорит, что локальная переменная в классе Win32FileSystem
(внутренний класс не в типичном Java API) бросает исключение NullPointerException, когда оно никогда не делалось раньше.
линии, которые находятся в трассировки стека следующим образом:
//In myFunction()
new File("foo").getAbsoluteFile();
и
//In testAbsoluteFile()
myFunction();
Почему это происходит? И как я могу сделать так, чтобы JMockit не выбрасывал исключение NullPointerException для локальных переменных внутренних классов?
Можете ли вы предоставить дополнительную информацию? Журнал ошибок указывает на две области вашего кода в ExpectationTest.java, строка 59 и 65. Каковы эти строки? – user3334871
@ user3334871 Я добавил его к вопросу – Thunderforge