2012-10-12 121 views
9

¿Cuál es el método equivalente para lo siguiente:equivalente Método para @InjectMocks

@Mock 
MyType1 myType1; 

@Autowired 
@InjectMocks 
MyType2 myType2; 

puedo reemplazar @Mock con mock(MyType1.class).

Pero, ¿cómo puedo reemplazar @InjectMocks con una llamada a un método? Algo como esto:

injectMocks(MyType2.class) 

Respuesta

2

¿Por qué utilizar Autowired en su prueba junit? Como se burla de las dependencias para MyType2, debe conocer su implementación concreate cuando redacte su prueba.

Entonces no necesita ni debe usar Spring o cualquier marco de inyección para crear la instancia de MyType2 que desea probar. ¡Créelo directamente en su inicialización de prueba! Sé que después de algunos años de usar frameworks IoC, es difícil escribir myType2 = new MyType2Impl(mock(myType1.class)), pero realmente hará que tus pruebas sean más simples y más rápidas (porque no hay contexto de aplicación para compilar). ej .:

@Before 
public void setup() { 
    myType1 = mock(MyType1.class); 
    myType2 = new MyType2Impl(myType1); 
} 

Pero si realmente desea utilizar COI en sus pruebas junit, utilice springockito ha sugerido por Brice, y construir su maqueta MyType1 en su contexto de aplicación.

+1

El enlace está muerto. –

+0

¿Qué es COI? – jonney

8

No hay una API pública en Mockito para inyección simulada. Además, como esta anotación se basa principalmente en la forma en que se presentan las cosas en una prueba, está bastante relacionada con la fase de inicialización de la prueba.

Aunque podría cambiar en algún momento en el futuro.

Sin embargo, los campos anotados de Mockito se pueden inicializar ya sea por MockitoJUnitRunner o por MockitoAnnotations.initMocks(). Ambos crean instancias simuladas y realizan inyecciones.

También veo en su código que está utilizando @Autowired - por lo tanto, cosas de primavera, probablemente configuradas a través de XML. @InjectMocks no fue realmente desarrollado para trabajar con otros marcos de inyección de dependencia, ya que el desarrollo fue impulsado por casos de uso de pruebas unitarias, no pruebas de integración.

Es posible que desee echar un vistazo a springockito, que es otro proyecto que intenta facilitar la creación de simulacro de Mockito en primavera.

Espero que ayude

+0

El enlace está muerto. –

+1

@TarunMaganti He actualizado el enlace. Aunque parece que ahora hay varios tenedores de Springockito, creo que este es el oficial, pero revisa antes de usarlo;) – Brice

Cuestiones relacionadas