Ho alcuni test JUnit che utilizzano lo TemporaryFolder
@Rule
. Usano il TemporaryFolder
in un metodo @Before
per eseguire alcune operazioni di configurazione:Interazione ciclo di vita JUnit @Rule con @Before
@Rule
public TemporaryFolder folder = new TemporaryFolder();
@Before
public void init() {
folder.newFile("my-file.txt");
}
@Test
public void myTest() { ... }
Il più delle volte questo funziona perfettamente. Tuttavia, quando si utilizza SpringJUnit4ClassRunner
, in alcuni casi viene rilevato il metodo init()
prima che venga applicata la Statement
all'interno della mia istanza TemporaryFolder
. Per questo motivo, la posizione della cartella temporanea non è impostata (ad esempio: null
) quando folder
viene utilizzato all'interno di init()
e il mio file finisce nella directory di lavoro, non /tmp
.
Quindi in alcuni casi i metodi @Before
vengono eseguiti prima delle regole, tuttavia, non riesco a stabilire uno schema definito. Occasionalmente vedo un problema simile con alcune delle mie implementazioni di regole.
Esiste un modo per garantire che le mie istruzioni di regole vengano applicate prima di qualsiasi metodo di configurazione?
Buona ricerca @pholser. Sto usando JUnit 4.8.x e sembra costruire le catene nello stesso ordine di 4.10. Tuttavia, methodBlock() viene sovrascritto in SpringJUnit4ClassRunner e imposta un ordine diverso simile a quello di JUnit 4.7. – teabot