2010-08-18 11 views
9

Sto creando un oggetto File mock con Mockito che verrà utilizzato come directory per memorizzare un nuovo file.Classe file Mock e NullPointerException

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

e dentro la mia classe Agente:

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

Ma io sto diventando un NullPointerException al blocco di inizializzazione dei file durante la creazione del nuovo file all'interno createNewFile metodo:

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

I penso che ciò accada perché File non ha alcun costruttore vuoto, quindi quando si deride l'oggetto, alcuni stati interni rimangono nulli.

Sto prendendo l'approccio sbagliato che deride l'oggetto File folder? Il mio obiettivo è controllare alcuni vincoli prima di creare il nuovo file, ma non voglio dipendere da una cartella reale esistente sul file system.

Grazie.

+0

"Penso che succeda perché File non ha alcun costruttore vuoto" Non ho familiarità con Mockito ma è più probabile che sia il caso. L'assenza di un costruttore con parametri sort ha senso nel momento in cui javadoc indica che File è "Una rappresentazione astratta di nomi di file e directory". In quanto tale, File dovrebbe puntare un determinato file sul sistema host ma non lo rappresenta "fisicamente" e semplicemente consente di eseguire operazioni di I/O su file. http://download.oracle.com/javase/1.4.2/docs/api/java/io/File.html –

risposta

8

È necessario definire il comportamento per getPath() per la cartella come viene chiamato internamente in classe File.

Si può fare come:

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

Si lavorerà solo fino a che non si ha realmente crea un nuovo file, ma solo chiamando nuovo file.

+0

Non credo che questo risolva il problema, almeno non per me, il codice in File (Il costruttore di file parent, String child) esplode perché l'attributo path è null, "if (parent.path.equals (" ")) {" ... – Adam

+0

Anche io non capisco come questo risolverebbe il problema. Dopo tutto non si va oltre la riga 1 nel codice che si registra come esempio. Il nullpointer viene lanciato proprio lì. – Steven

+1

Accetto che questo non risponda alla domanda per JDK 7u40 e fino a causa di https://bugs.openjdk.java.net/browse/JDK-8003992 che ha modificato FileInputStream per chiamare File.isInvalid() nel suo ctor e File.isInvalid () accede direttamente alla variabile membro File.path anziché a File.getPath(). – jenglert