2012-04-17 9 views
8

Io sono di fronte a un problema strano qui ...JUnit Regola temporaryFolder getta arbitrariamente un'IOException

Ho un JUnit attuare alcuni test. Questa classe è simile al seguente: class

public class MyTest { 

    @Rule 
    public TemporaryFolder folder = new TemporaryFolder(); 

    @Test 
    public void myTest1() throws IOException { 
     String destinationPath = folder.newFile("destination1.txt").getPath(); 
     // Do things 
    } 

    @Test 
    public void myTest2() throws IOException { 
     String destinationPath = folder.newFile("destination2.txt").getPath(); 
     // Do things 
    } 

    @Test 
    public void myTest3() throws IOException { 
     String destinationPath = folder.newFile("destination.txt").getPath(); 
     // Do things 
    } 
} 

Questo test consente di lavorare nel mio ambiente precedente e lo fa ancora in Continuum.

Eppure, al momento del lancio da Eclipse nessuno, alcune o tutte le prove arbitrariamente gettare un IOException come ad esempio:

java.io.IOException: The system cannot find the path specified 
    at java.io.WinNTFileSystem.createFileExclusively(Native Method) 
    at java.io.File.createNewFile(File.java:883) 
    at org.junit.rules.TemporaryFolder.newFile(TemporaryFolder.java:53) 
    at MyTest.myTest2(MyTest.java:50) 

Ho lo stesso problema esatto in esecuzione JUnit 4.9 o JUnit 4,10 ...

Come posso risolvere il problema in modo che funzioni correttamente?

+0

Questo dovrebbe funzionare. Quale 'Runner' stai usando per eseguire i test? Sono concomitanti? Si potrebbe voler eseguire il debug di più, ovvero la variabile 'cartella' anche vedere dove punta quando si verifica il problema. –

+0

Puoi dire cosa stai facendo nei test? Stai scrivendo ai file? Inoltre, hai l'indicizzazione di Windows in esecuzione? –

+0

Sì, lo scopo del programma è elaborare i dati e scrivere un file come output. Nessuna indicizzazione di Windows è in esecuzione. –

risposta

1

Si dovrebbe provare a disabilitare la protezione anti-virus.

Avevo lo stesso problema e, dopo aver disabilitato Kaspersky, tutto funzionava perfettamente.

0

A quanto sembra, questo potrebbe essere più un problema relativo a Windows che uno JUnit. In qualche modo, potrebbe mancare il diritto di creare cartelle/file durante l'accesso come "utente con diritti limitati".

Credo che si potrebbe provare a creare un yourslef cartella temporanea, proprio come JUnit fa:

 File folder= File.createTempFile("junit", ""); 

Se la dichiarazione di cui sopra getta lo stesso errore, si dovrebbe indagare i diritti finestre utente, magari provare l'esecuzione del test sotto un utente "full rights".