Obtener el nombre de la prueba que se está ejecutando actualmente en JUnit 4

Resuelto Dave Ray asked hace 15 años • 17 respuestas

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.

Dave Ray avatar Jan 23 '09 22:01 Dave Ray
Aceptado

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());
    }
}
FroMage avatar Sep 15 '2009 11:09 FroMage

JUnit 4.9.x y superior

Desde JUnit 4.9, la TestWatchmanclase ha quedado obsoleta en favor de la TestWatcherclase, 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());
   }
};
Duncan Jones avatar Dec 21 '2012 09:12 Duncan Jones