Tengo el siguiente caso de uso:
Tengo una clase de prueba con 3 componentes, de los cuales 2 de ellas son inyectar en el tercero; Estoy utilizando JUnit y Mockito para probar
public class MyTestClass{
@Mock
SomeService someService;
@Mock
AnotherService anotherService;
@InjectMock
MainService mainService;
@BeforeMethod
public void init() {
initMocks(this);
}
@Test
public void test(){
when(someService.someMethod(any())).thenReturn(something);
when(anotherService.someMethod(any()).thenReturn(something);
mainService.someMainMerhod();
// ...other assert logic
}
}
Y aquí tengo el componente MainService primavera, que ha inyectado los otros dos componentes
@Component
public class MainService{
@Autowired
private SomeService someService; //Why here I have null component
private AnotherService anotherService; // and here I have an initialized component ???
public MainService(AnotherService anotherService){
this.anotherService = anotherService;
}
// implementation
}
Pregunta 1 : ¿Por ejemplo someService es nulo cuando estoy usando tanto constructor y @Autowired?
Pregunta 2 : ¿Por qué si estoy usando sólo el constructor sin @Autowired y viceversa, todo funciona, ya que no cargue el contexto de Primavera ... Tengo pruebas de unidad ...
Los estados Javadoc: ". Mockito tratará de burla Inyectar bien mediante la inyección de constructor, la inyección de setter, o inyección propiedad con el fin Si cualquiera de la estrategia falla, entonces Mockito no informará fracaso; es decir, que tendrán que proporcionar las dependencias a sí mismo. "
Por lo tanto, se producirá un error en silencio.