2010-08-18 3 views
9

Я создаю файл mockito с файлами Mockito, который будет использоваться в качестве каталога для хранения нового файла.Mock File class и NullPointerException

Folder folder = Mockito.mock(File.class); 
File file = new Agent().createNewFile(folder, "fileName"); 

и внутри моего класса Агент:

public File createNewFile(File folder, String filename){ 
    return new File(folder, "testfile"); 
} 

Но я получаю NullPointerException при инициализации блока файла при создании нового файла внутри createNewFile метода:

java.lang.NullPointerException at java.io.File.<init>(File.java:308) 

I думаю, что это происходит потому, что у Файла нет никакого пустого конструктора, поэтому, когда насмехается над объектом, внутреннее состояние остается нулевым.

Я принимаю неправильный подход, издеваясь над объектом File folder? Моя цель - проверить некоторые ограничения перед созданием нового файла, но я не хочу зависеть от существующей реальной папки в файловой системе.

спасибо.

+0

«Я думаю, это происходит потому, что у файла нет пустого конструктора» Я не знаком с Mockito, но это, скорее всего, случай. Отсутствие конструктора с параметрами вроде имеет смысл, поскольку javadoc утверждает, что File является «абстрактным представлением путей к файлам и каталогам». Таким образом, File должен указать данный файл в хост-системе, но не представляет его «физически» и просто позволяет выполнять операции ввода-вывода файлов. http://download.oracle.com/javase/1.4.2/docs/api/java/io/File.html –

ответ

8

Вам необходимо определить поведение для getPath() для папки, поскольку оно получает внутренне в классе File.

Вы можете сделать это, как:

File folder = Mockito.mock(File.class); 
when(folder.getPath()).thenReturn("C:\temp\"); 
File file = new Agent().createNewFile(folder, "fileName"); 

Это будет работать только, пока вы на самом деле не создать новый файл, но только вызывая новый файл.

+0

Я не верю, что это решает проблему, по крайней мере, не для меня, код в файле (File parent, String child), потому что атрибут path имеет значение null, "if (parent.path.equals (" ")) {" ... – Adam

+0

Я тоже не понимаю, как это решит проблему. В конце концов вы не получите дальше строки 1 в коде, который вы отправляете в качестве примера. Нулевой указатель выбрасывается прямо там. – Steven

+1

Согласитесь, это не ответит на вопрос JDK 7u40 и из-за https://bugs.openjdk.java.net/browse/JDK-8003992, который модифицировал FileInputStream для вызова File.isInvalid() в его ctor и File.isInvalid () получает доступ к переменной элемента File.path, а не File.getPath(). – jenglert