2017-01-11 3 views
1
@Test 
    public void createFileTest() throws Exception { 
     File file = new File("somefile.txt"); 
     boolean expectedResult = true; 
     boolean actualResult = false; 
     if (file.exists()){ 
      actualResult = true; 
     } 
     assertEquals(expectedResult, actualResult); 
    } 

Ich habe eine Methode, die eine JSON-Datei erstellt oder neu schreibt. Die Testmethode, die ich jetzt geschrieben habe, kann nicht feststellen, dass die Datei existiert, obwohl die Datei im Verzeichnis sichtbar ist.Warum funktioniert mein JUnit-Test für die Existenz einer Datei nicht?

Wie wird file.exists() falsch implementiert oder was ist eine funktionierende Alternative?

+5

Vielleicht ist die Datei nicht in dem Verzeichnis gesucht wird Sie der Meinung sind, versuchen Sie den Druck 'file.getAbsolutePath()'. – Berger

+2

Sie können einfach 'assertTrue (file.exists())' –

+0

Mögliche Duplikate von [wie auf eine Datei im Stamm des Android-Projekts, Java-Pfad zugreifen] (http: // stackoverflow.com/questions/17444725/how-to-a-Datei-im-Wurzel-des-Android-Projekt-Java-Pfad) –

Antwort

0

Wenn ich das selbst teste, scheint die Funktion so zu funktionieren, wie ich es erwarten würde.

Wenn die Datei "somefile.txt" nicht vorhanden ist, sollte der Test fehlschlagen. Wenn sie jedoch vorhanden ist, wird der Test bestanden.

einfach auf zu klären, was der Konstruktor und .exists() tun:

File file = new File("somefile.txt"); 

Das schafft nur eine neue Datei-Instanz, eine abstrakte Pfadname nicht eine tatsächliche Datei.

file.exists() 

Said am besten durch die javadoc:

Prüft, ob die Datei oder das Verzeichnis, das von diesem abstrakten Pfadname bezeichnet existiert.

Wenn dieser Test fehlschlägt, würde ich vorschlagen,

file.getAbsoluteFile() 

dies einen String des absoluten Pfad zurückgibt Hinzufügen wo diese Datei wenn es sie gäbe wäre.

0

Bei Ihrer Frage geht es nicht um UnitTesting, sondern darum, wie Sie auf die Datei in Java zugreifen.

Die Art und Weise Sie die Datei asccess:

File file = new File("somefile.txt"); 

die Datei im selben Ordner auf dem Dateisystem als Java-Quelldatei containig den Test sein muss.


Nur für die Akten:

Unittests greifen nicht auf das Dateisystem (oder andere teure Ressourcen).

In UnitTest verspotten Sie diese Ressourcen (oder die Klassen, die mit ihnen arbeiten) mit einem spöttischen Framework wie Mockito, JMock (-it) oder ähnlichem.

Auch Sie tun nicht Test 3rd Party Klassen (wie java.io.File). Sie testen Ihre Klassen, wie sie mit dieser Abhängigkeit kommunizieren:

@Test 
public void writeTo_FileNotExisting_CreatesTheFile(){ 
    // arrange 
    File targetFile = mock(File.class); 
    when(targetFile.exists()).thenReturn(false); 

    // act 
    new YourJsonWriter().writeTo(targetFile); 

    // assert 
    verify(targetFile).createNewFile(); 
}