Springockito
Extensión de Spring para simplificar la creación de mocks en los test. Ofrece la posibilidad de realizar la creación de los mocks mediante los xml de Spring o mediante anotaciones en el mismo test.
Ejemplo con anotaciones
Agregar la siguiente dependencia en el pom.xm del proyecto.
<dependencies>
...
<dependency>
<groupId>org.kubek2k</groupId>
<artifactId>springockito-annotations</artifactId>
<version>1.0.8</version>
<scope>test</scope>
</dependency>
...
</dependencies>
En el ejemplo se prueba el método "talk" de la clase "VoiceService", el cual debe ejecutar una o dos veces el método "play" de la clase "Audio". Esta ultima es la clase que mockeamos para verificar las ejecuciones de su métodos.
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(loader = SpringockitoContextLoader.class,
locations = {"classpath:spring/jenkins-speech-integration-test.xml"})
@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD) public class VoiceServiceTest {
@Autowired private VoiceService instance; @ReplaceWithMock @Autowired private Audio audio;
@Test
public void talk_messageWithPreSound_executePlayMethodTwoTimes() throws Exception {
String message = "Hola";
instance.talk(message);
verify(audio, times(2)).play((InputStream) any());
}
@Test
public void talk_messageWithoutPreSound_executePlayMethodOneTimes() throws Exception {
instance.setPreSound("");
String message = "Hola";
instance.talk(message);
verify(audio, times(1)).play((InputStream) any());
}
}
En el atributo “loader” de la anotación “ContextConfiguration” hay que setear la clase “SpringockitoContextLoader” de Springockito, esta clase es la encargada de realizar las sustituciones de las clases reales por los mocks.