¿Por qué los métodos de prueba JUnit necesitan estar vacío?

Artem Malchenko:

He leído en muchos lugares que los métodos de prueba deben / deberán ser void, pero nadie dice lo que es la razón de esto.

He encontrado en MethodValidator la siguiente comprobación sin comentarios / javadocs.

    if (each.getReturnType() != Void.TYPE) {
        errors.add(new Exception("Method " + each.getName()
                + " should be void"));
    }

Así que por qué debería ser void?

davidxxx:

Se hace la pregunta inversa: ¿por qué los métodos de prueba JUnit tendrían que ser no void?
No hay razón: porque un método de ensayo no está diseñado para devolver un resultado que será explotado por una clase de cliente.
El objetivo de una prueba de unidad está validando algunas afirmaciones. Un corredor de prueba invoca los métodos de ensayo y y este es el corredor que interpreta cualquier error de aserción o cualquier excepción lanzada durante la ejecución de la prueba para producir el resultado de la prueba.

Cabría preguntarse por qué las pruebas no devuelven el resultado afirmación.
Pero sería una mala idea, ya que sería muy engorroso para las pruebas de unidad de escritura:

@Test
public AssertionResult foo(){
   Bar actualBar = foo.doThat(...);
   if (actualBar == null){
       return AssertionResult.fail("actualBar == null");
   }
}

Escribir algo así como que se pueda leer y recto:

@Test
public void foo(){
   Bar actualBar = foo.doThat(...);
   Assert.assertNotNull(actualBar);
}

También podríamos preguntarnos por qué los métodos de prueba no pueden ser invocadas por otros métodos de ensayo tales como:

@Test
public int foo(){
   Bar actualBar = foo.doThat(...);
   //...
   return intValue;
}

@Test
public void fooWithComputedInt(){
   Bar actualBar = foo.doThat(foo());
   //...
}

Pero esto también sería una buena idea ya que esto par la ejecución pruebas, mientras que la ejecución de las pruebas de unidad que se ha aislado de los demás. Y también haría que las pruebas sean ejecutados varias veces y pruebas de unidad tiene que ser ejecutada lo más rápido posible.

Así que en realidad no tiene valor para hacer una declaración de método de prueba es otra cosa que void.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=179747&siteId=1
Recomendado
Clasificación