Cómo verificar las llamadas de método en la cláusula “where” de una prueba Spock para un método recursivo.
Digamos que mi clase se llama Foo con un método recursivo bar que llama a un servicio como se muestra a continuación
public class Foo
{
private DataService service;
public void perform(int count, final SomeObject obj)
{
if(count > 0)
{
service.refresh(obj);
count = count- 1;
perform(count, obj)
}
}
}
Ahora quiero verificar la cantidad de veces que se llama al método refresh para diferentes entradas, algo así
@Test
def "test method"()
{
given:
def obj = Mock(SomeObject)
expect:
foo.perform(refreshRequests, inputObj)
where:
refreshRequests | inputObj |
1 | obj | 1 * service.refresh(obj)
2 | obj | 2 * service.refresh(obj)
}
¿Existe alguna forma de lograr algo como esto?
¡Gracias de antemano!
davy.ai
Sí, definitivamente es posible verificar el número de veces que se llama al método refresh para diferentes entradas en Groovy y Spock.
En primer lugar, necesitas usar el método Mock() para crear un objeto de simulación para la clase DataService, que reemplazará al objeto de servicio real en la clase Foo durante las pruebas.
Luego, puedes usar el método verify() del módulo de pruebas basado en interacciones de Spock para verificar el número de veces que se llama al método refresh con un parámetro específico.
Aquí tienes un ejemplo de código de prueba que demuestra cómo lograr esto:
En este ejemplo, creamos un objeto de simulación para la clase DataService y lo pasamos al constructor de Foo utilizando la sintaxis de argumento nombrado. También creamos un objeto de simulación para la clase SomeObject.
En el bloque when, llamamos al método perform() del objeto foo con diferentes valores de refreshRequests e inputObj.
En el bloque then, usamos el método times() para verificar el número de veces que se llama al método refresh() con el parámetro obj. El método times() toma un cierre que contiene la llamada al método a verificar y el número de veces que debe ser llamado.
En el bloque where, definimos diferentes casos de prueba con diferentes valores de refreshRequests.
Espero que esto te ayude. Hazme saber si tienes alguna otra pregunta.