java - framework - groovymock
Simple Mockito verifica trabajos en JUnit pero no Spock (1)
Usando el ejemplo más básico de la página de ejemplos de Mockito , puedo ejecutar exitosamente en JUnit.
Sin embargo, cuando ejecuto la misma prueba en Spock, falla.
Versión JUnit / Java (esto pasa):
import org.junit.Test;
import java.util.List;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
public class SimpleJunitTest
{
@Test
public void basicMockTest()
{
List mockedList = mock(List.class);
//using mock object
mockedList.add("one");
mockedList.clear();
//verification
verify(mockedList).add("one");
verify(mockedList).clear();
}
}
Versión de Spock / Groovy (esto falla):
import static org.mockito.Mockito.mock
import static org.mockito.Mockito.verify
class SimpleSpockTest extends spock.lang.Specification
{
def "Basic Mock Test"()
{
given:
//mock creation
List mockedList = mock(List.class);
when:
//using mock object
mockedList.add("one");
mockedList.clear();
then:
//verification
verify(mockedList).add("one");
verify(mockedList).clear();
}
}
Aquí está el error que recibo cuando falla la prueba de Spock:
Condition not satisfied:
verify(mockedList).add("one")
| | |
| | false
| $java.util.List$$EnhancerByMockitoWithCGLIB$$172e393a@613043d2 (renderer threw
NullPointerException)
$java.util.List$$EnhancerByMockitoWithCGLIB$$172e393a@613043d2 (renderer threw
NullPointerException)
at SimpleSpockTest.Basic Mock Test(SimpleSpockTest.groovy:25)
¿Alguna idea o sugerencia? Realmente me gustan Spock y Mockito y espero que funcionen bien juntos. ¡Muchas gracias!
En términos generales, un bloque then solo puede contener aserciones en forma de expresiones booleanas. Una expresión de verificación de Mockito no se ajusta a este contrato, ya que devolverá un valor false
( null
, false
, 0
) cuando pase, lo que se interpreta como una afirmación fallida de Spock.
Para resolver este problema, puede escribir un método auxiliar que se ajuste a las expresiones de verificación y siempre devuelva true
, o puede usar el marco de burla incorporado de Spock en lugar de Mockito.