2010-08-18 20 views
9

Ich erstelle ein File-Mock-Objekt mit Mockito, das als Verzeichnis zum Speichern einer neuen Datei verwendet wird.Mock-Dateiklasse und NullPointerException

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

und in meinem Agenten Klasse:

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

Aber ich bin eine Nullpointer bei der Initialisierung Block Datei erhalten, wenn innerhalb createNewFile Methode, um die neue Datei zu erstellen:

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

I Ich denke, es passiert, weil File keinen leeren Konstruktor hat. Wenn also das Objekt verspottet wird, bleibt ein interner Zustand null.

Bin ich die falsche Herangehensweise und spotte das File folder Objekt? Mein Ziel ist es, einige Einschränkungen vor dem Erstellen der neuen Datei zu überprüfen, aber ich möchte nicht auf einen vorhandenen realen Ordner im Dateisystem angewiesen sein.

Vielen Dank.

+0

"Ich denke, es passiert, weil Datei keinen leeren Konstruktor hat" Ich bin nicht vertraut mit Mockito, aber das ist wahrscheinlich der Fall. Das Fehlen eines Konstruktors mit Parametern ist sinnvoll, da das Javadoc angibt, dass Datei "eine abstrakte Darstellung von Datei- und Verzeichnispfadnamen" ist. Daher müsste Datei eine bestimmte Datei auf das Host-System verweisen, aber nicht "physisch" repräsentieren und einfach Datei-E/A-Operationen ausführen. http://download.oracle.com/javase/1.4.2/docs/api/java/io/File.html –

Antwort

8

Sie müssen das Verhalten für getPath() für den Ordner definieren, wie er intern in der Dateiklasse aufgerufen wird.

Sie können es als tun:

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

Es wird nur funktionieren, bis Sie wirklich nicht, eine neue Datei erstellen, sondern nur neue Datei aufrufen.

+0

Ich glaube nicht, dass dies das Problem löst, zumindest nicht für mich, den Code in Datei (Der Konstruktor der Datei parent, String child) explodiert, weil das Attribut path null ist, "if (parent.path.quals (" ")) {" ... – Adam

+0

Ich verstehe auch nicht, wie dies das Problem lösen würde. Immerhin kommen Sie nicht weiter als Zeile 1 in dem Code, den Sie als Beispiel veröffentlichen. Der Nullpointer wird genau dort geworfen. – Steven

+1

Stimmen Sie zu, dass die Frage für JDK 7u40 und up nicht wegen https://bugs.openjdk.java.net/browse/JDK-8003992 beantwortet wird, die FileInputStream änderte, um File.isInvalid() in seinem ctor und File.isInvalid aufzurufen () greift direkt auf die Membervariable File.path zu und nicht auf File.getPath(). – jenglert

Verwandte Themen