Pregunta Usando MockitoJUnitRunner.class en lugar de SpringJUnit4ClassRunner.class


Tengo una pregunta sobre el uso de SpringJUnit4ClassRunner. Para casos puros de Junits o Unit Test, debemos usar anotaciones basadas en Spring, como @Autowired junto con SpringJUnit4ClassRunner o deberíamos usar solo el MockitoJUnitRunner en cambio con el @RunWith anotación en la parte superior de la clase de prueba?

Me refiero a reemplazar

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({ "classpath:test-applicationContext.xml" })

con solo

@RunWith(MockitoJUnitRunner.class)

en la parte superior de la clase. Esto funciona para mi.

En Junits, normalmente no realizamos ninguna llamada externa, como llamadas a DB o llamadas a algún otro servicio web. Tenemos que burlar estas llamadas externas usando @Mock Anotaciones sobre este servicio. Objetos. Y luego crea un objeto real de la clase que estamos probando y que depende de estos simulacros. Entonces podemos usar @InjectMocks en el objeto real para que se inyecte con los objetos burlados.

Ejemplo de servicio-A-> Llamadas-> Servicio-B-> Llamadas-> Servicio-C

Mientras pruebamos A deberíamos burlarnos del servicio B y mientras probamos Service-B deberíamos burlarnos de Service-C.

Algunos fragmentos de código

@RunWith(MockitoJUnitRunner.class)
public class TestServiceA {
    @Mock
    B mockObj;

    @InjectMocks
    A realObj;

    @Test
    public void testServiceA() {
    .....
    .....
    }
}       

Por lo tanto, creo que para los casos de prueba de la Unidad no necesitamos confiar en el contenedor de Spring para proporcionarnos la instancia de la clase que estamos probando.

Por favor, da tus sugerencias.

Usando SpringJUnit4ClassRunner.class en lugar de MockitoJUnitRunner.class


9
2018-06-28 15:47


origen


Respuestas:


Si intenta simplemente probar una clase sin las dependencias, como usted describe, no hay necesidad de SpringJUnit4ClassRunner. Este corredor puede generar un contexto de primavera completo con objetos (simulados) que puede definir en su configuración de contexto de aplicación (de prueba). Con este mecanismo, SpringJUnit4ClassRunner es mucho más lento que el MockitoJUnitRunner regular.

SpringJUnit4ClassRunner es muy poderoso para fines de prueba de integración.

Empiezo por defecto con MockitoJUnitRunner y si llego a los límites de este corredor, por ejemplo porque necesito burlarme de constructores, métodos estáticos o variables privadas, cambio a PowerMockJUnitRunner. Esto es para mí un último recurso, ya que normalmente dice que el código es "malo" y no está escrito para ser probado. Otros corredores normalmente no son necesarios para pruebas unitarias aisladas.


1
2018-05-23 05:17