2011-04-24 9 views
6

Soy nuevo en el uso de Mockito y estoy tratando de comprender una manera de hacer una prueba unitaria de una clase que dependa de las dependencias inyectadas. Lo que quiero hacer es crear objetos simulados de las dependencias y hacer que la clase que estoy probando los use en lugar de las dependencias inyectadas que inyectaría Spring. He estado leyendo tutoriales pero estoy un poco confundido sobre cómo hacer esto.Mockito, ¿Está probando un objeto que se basa en dependencias inyectadas (Spring)?

Tengo uno la clase quiero probar de esta manera:

package org.rd.server.beans; 

import org.springframework.beans.factory.annotation.Autowired; 

public class TestBean1 { 

    @Autowired 
    private SubBean1 subBean1; 

    private String helloString; 

    public String testReturn() { 

     subBean1.setSomething("its working"); 
     String something = subBean1.getSomething(); 
     helloString = "Hello...... " + something; 

     return helloString; 
    } 

Entonces tengo la clase que quiero usar como un objeto de burla (en lugar de la clase regular SubBean1, como a continuación:

package org.rd.server.beans.mock; 

public class SubBean1Mock { 

    private String something; 

    public String getSomething() { 
     return something; 
    } 

    public void setSomething(String something) { 
     this.something = something; 
    } 


} 


    } 

sólo quiero intenta ejecutar una prueba simple como esto:

package test.rd.beans; 
import org.rd.server.beans.TestBean1; 

import junit.framework.*; 


public class TestBean1Test extends TestCase 
{ 
    private TestBean1 testBean1; 

    public TestBean1Test(String name) 
    { 
     super(name); 
    } 

    public void setUp() 
    { 
     testBean1 = new TestBean1(); 
     // Somehow inject the mock dependency SubBean1Mock ??? 

    } 

    public void test1() { 
     assertEquals(testBean1.testReturn(),"working"); 
    } 
} 

Me imagino que debe haber una forma bastante simple de hacerlo, pero parece que no puedo entender los tutoriales, ya que aún no tengo el contexto para entender todo lo que hacen/explican. Si alguien pudiera arrojar algo de luz sobre esto, lo apreciaría.

Respuesta

8

Si está utilizando Mockito que crean burla llamando al método estático simulacro de Mockito. A continuación, puede pasar el simulacro a la clase que está tratando de probar. El método de configuración sería algo como esto:

testBean1 = new TestBean1(); 
SubBean1 subBeanMock = mock(SubBean1.class); 
testBean1.setSubBean(subBeanMock); 

A continuación, puede añadir el comportamiento adecuado a sus objetos simulados para lo que está tratando de probar con el método estático cuando el jugador de Mockito, por ejemplo:

when(subBeanMock.getSomething()).thenReturn("its working"); 
5

En Mockito en realidad no vas a crear nuevas implementaciones "simuladas", sino que vas a burlar los métodos en la interfaz de la dependencia inyectada al decirle a Mockito qué devolver cuando se llame al método.

Escribí una prueba de un controlador Spring MVC usando Mockito y lo traté como cualquier otra clase de Java. Pude burlarme de los otros granos de primavera que tenía e inyectarlos usando Spring's ReflectionTestUtils para pasar los valores basados ​​en Mockito. Lo escribí en mi blog en febrero. Tiene la fuente completa para la clase de prueba y la mayor parte de la fuente del controlador, por lo que probablemente sea demasiado tiempo para poner aquí el contenido.

http://digitaljoel.nerd-herders.com/2011/02/05/mock-testing-spring-mvc-controller/

+0

Gracias, tu respuesta me ayuda mucho a entenderlo en términos sencillos en inglés :) Creo que estoy en el camino correcto ahora – Rick

+0

Soy bastante nuevo en la burla, pero hace realmente complejas las pruebas complejas una vez que entiendes cómo funciona. Realmente me gustó Mockito y me pareció muy amable trabajar con él. ¡Buena suerte con tus pruebas! – digitaljoel

+0

gracias, excelente artículo, tuve algunos problemas para que funcionase, pero ahora lo entiendo mejor, estoy seguro de que es algo que hice mal al ser nuevo, pero pude hacer que Ed trabaje. Las pruebas simuladas definitivamente son algo que debería estar haciendo más de – Rick

Cuestiones relacionadas