¿Cómo funciona Junit @Rule?

Resuelto Dipak asked hace 12 años • 4 respuestas

Quiero escribir casos de prueba para una gran cantidad de código, me gustaría conocer los detalles de @Rulela función de anotación JUnit, para poder usarla para escribir casos de prueba. Proporcione algunas buenas respuestas o enlaces que brinden una descripción detallada de su funcionalidad a través de un ejemplo simple.

Dipak avatar Nov 21 '12 15:11 Dipak
Aceptado

Las reglas se utilizan para agregar funcionalidad adicional que se aplica a todas las pruebas dentro de una clase de prueba, pero de una manera más genérica.

Por ejemplo, ExternalResource ejecuta código antes y después de un método de prueba, sin tener que usar @Beforey @After. El uso de ExternalResourceen lugar de @Beforey @Afterbrinda oportunidades para una mejor reutilización del código; La misma regla se puede utilizar desde dos clases de prueba diferentes.

El diseño se basó en: Interceptores en JUnit

Para obtener más información, consulte la wiki de JUnit: Reglas .

Matthew Farwell avatar Nov 21 '2012 08:11 Matthew Farwell

Las reglas de Junit funcionan según el principio de AOP (programación orientada a aspectos). Intercepta el método de prueba, brindando así la oportunidad de hacer algunas cosas antes o después de la ejecución de un método de prueba en particular.

Tome el ejemplo del siguiente código:

public class JunitRuleTest {

  @Rule
  public TemporaryFolder tempFolder = new TemporaryFolder();

  @Test
  public void testRule() throws IOException {
    File newFolder = tempFolder.newFolder("Temp Folder");
    assertTrue(newFolder.exists());
  }
} 

Cada vez que se ejecuta el método de prueba anterior, se crea una carpeta temporal y se elimina después de la ejecución del método. Este es un ejemplo de una regla lista para usar proporcionada por Junit.

También se puede lograr un comportamiento similar creando nuestras propias reglas. Junit proporciona la interfaz TestRule, que se puede implementar para crear nuestra propia regla Junit.

Aquí hay un enlace útil como referencia:

  • http://www.codeaffine.com/2012/09/24/junit-rules/
Abhishek Mohanty avatar Jan 05 '2016 09:01 Abhishek Mohanty

La explicación de cómo funciona:

JUnit envuelve su método de prueba en un objeto Declaración para que Execute()ejecute su prueba. Luego, en lugar de llamar statement.Execute()directamente para ejecutar la prueba, JUnit pasa la Declaración a una TestRule con la @Ruleanotación. La función "aplicar" de TestRule devuelve una nueva Declaración dada la Declaración con su prueba. El método de la nueva Declaración Execute()puede llamar al método de ejecución de la Declaración de prueba (o no, o llamarlo varias veces) y hacer lo que quiera before and after.

Ahora, JUnit tiene una nueva Declaración que hace más que solo ejecutar la prueba, y puede pasarla nuevamente a más reglas antes de finalmente llamar a Ejecutar.

Alexander Taylor avatar Jun 16 '2016 19:06 Alexander Taylor

Las reglas se utilizan para mejorar el comportamiento de cada método de prueba de forma genérica. La regla Junit intercepta el método de prueba y nos permite hacer algo antes de que un método de prueba comience a ejecutarse y después de que se haya ejecutado un método de prueba.

Por ejemplo, usando la regla @Timeout podemos establecer el tiempo de espera para todas las pruebas.

public class TestApp {
    @Rule
    public Timeout globalTimeout = new Timeout(20, TimeUnit.MILLISECONDS);

    ......
    ......

 }

La regla @TemporaryFolder se utiliza para crear carpetas y archivos temporales. Cada vez que se ejecuta el método de prueba, se crea una carpeta temporal y se elimina después de la ejecución del método.

public class TempFolderTest {

 @Rule
 public TemporaryFolder tempFolder= new TemporaryFolder();

 @Test
 public void testTempFolder() throws IOException {
  File folder = tempFolder.newFolder("demos");
  File file = tempFolder.newFile("Hello.txt");

  assertEquals(folder.getName(), "demos");
  assertEquals(file.getName(), "Hello.txt");

 }


}

Puede ver ejemplos de algunas reglas integradas proporcionadas por junit en este enlace .

Hari Krishna avatar Apr 01 '2020 16:04 Hari Krishna