es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Java: Spock obliga a fallar la prueba en invocación de burla no registrada.

Tengo código Java y una prueba escrita en groovy spock. Normalmente, la prueba sigue este patrón:

Mi muestra de código Java

public User findUser(String id){
return userRepo.findById(id);
}

mi muestra de prueba

def “Mi prueba”(){
given:
String id = “muestra”

and:
1 * userRepoMock.findById(id) >> testUser

when:
User user = userServiceUnderTest.findUser(id);

then:
user == testUser
}

donde “and” contiene una simulación con un recuento de invocaciones.

Ahora imagina que alguien agregó otra invocación al método en el futuro, como:

public User findUser(String id){
anotherRepo.removeTypeById(id);
return userRepo.findById(id);
}

Incluso con este cambio de código, la prueba anterior pasará sin ninguna modificación. ¿Cómo puedo decirle a Spock que falle en una invocación simulada no registrada? En este caso, “anotherRepo.removeTypeById(id);”. Quiero que si alguien agrega otra invocación, se vea obligado a actualizar la prueba correctamente.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Puede usar la anotación @Unroll para asegurarse de que se registren todas las invocaciones adicionales en la prueba. Esta anotación hará que Spock genere un caso de prueba separado para cada invocación y fallará si alguna de las invocaciones no se registra. Por ejemplo:

    @Unroll
    def "Mi Prueba"(){
      dado:
      String id = "sample"
    
      y:
      1 * userRepoMock.findById(id) >> testUser
      1 * anotherRepoMock.removeTypeById(id) >> testType
    
      cuando:
      User user = userServiceUnderTest.findUser(id);
    
      entonces:
      user == testUser
    }
    

    Esto asegurará que se registren todas las invocaciones adicionales en la prueba, y fallará si alguna de las invocaciones no se registra.

Comments are closed.