Tengo algunas pruebas JUnit que usan TemporaryFolder
. Utilizan el TemporaryFolder
en un método @Before
para llevar a cabo algún tipo de configuración:JUnit @Rule interacción del ciclo de vida con @Antes de
@Rule
public TemporaryFolder folder = new TemporaryFolder();
@Before
public void init() {
folder.newFile("my-file.txt");
}
@Test
public void myTest() { ... }
La mayoría de las veces esto funciona perfectamente. Sin embargo, al utilizar el SpringJUnit4ClassRunner
encuentro que en algunos casos se invoca el método init()
antes de que se aplique Statement
dentro de mi instancia TemporaryFolder
. Debido a esto, la ubicación de la carpeta temporal no está configurada (es decir: null
) cuando se usa folder
dentro de init()
y mi archivo termina en el directorio de trabajo, no /tmp
.
De modo que en algunos casos los métodos @Before
se ejecutan antes que las reglas, sin embargo, no puedo establecer un patrón definido. Ocasionalmente veo un problema similar con algunas de mis propias implementaciones de reglas.
¿Hay alguna manera de asegurarme de que mis declaraciones de reglas se apliquen antes de cualquier método de configuración?
Buen hallazgo @pholser. Estoy usando JUnit 4.8.xy eso parece construir las cadenas en el mismo orden que 4.10. Sin embargo, el método Bloquear() se reemplaza en SpringJUnit4ClassRunner y establece un orden diferente similar al de JUnit 4.7. – teabot