Obtener el nombre de la prueba que se está ejecutando actualmente en JUnit 4
En JUnit 3, pude obtener el nombre de la prueba que se está ejecutando actualmente de esta manera:
public class MyTest extends TestCase
{
public void testSomething()
{
System.out.println("Current test is " + getName());
...
}
}
que imprimiría "La prueba actual es pruebaAlgo".
¿Existe alguna forma sencilla o lista para usar de hacer esto en JUnit 4?
Antecedentes: obviamente, no quiero imprimir simplemente el nombre de la prueba. Quiero cargar datos específicos de la prueba que están almacenados en un recurso con el mismo nombre que la prueba. Ya sabes, convención sobre configuración y todo eso.
JUnit 4.7 agregó esta característica, parece usar TestName-Rule . Parece que esto le dará el nombre del método:
import org.junit.Rule;
public class NameRuleTest {
@Rule public TestName name = new TestName();
@Test public void testA() {
assertEquals("testA", name.getMethodName());
}
@Test public void testB() {
assertEquals("testB", name.getMethodName());
}
}
JUnit 4.9.x y superior
Desde JUnit 4.9, la TestWatchman
clase ha quedado obsoleta en favor de la TestWatcher
clase, que tiene invocación:
@Rule
public TestRule watcher = new TestWatcher() {
protected void starting(Description description) {
System.out.println("Starting test: " + description.getMethodName());
}
};
Nota: Se debe declarar la clase contenedora public
.
Unidad 4.7.x - 4.8.x
El siguiente enfoque imprimirá los nombres de los métodos para todas las pruebas de una clase:
@Rule
public MethodRule watchman = new TestWatchman() {
public void starting(FrameworkMethod method) {
System.out.println("Starting test: " + method.getName());
}
};