Я пытался создать тестовый пример для класса с геттером и внедрением конструктора. Когда я использую @MockBean для внедрения установщика, @Mock для внедрения в конструктор, а также использую @RunWith(SpringJUnit4ClassRunner.class) и MockitoAnnotations.initMocks(this); внедрение bean-компонента .
Если я прокомментирую MockitoAnnotations.initMocks(this); внедрение конструктора не работает.
Теперь все bean-компоненты внедряются идеально, но @Mock beans(Contructor Injected) bean-компоненты, издевающиеся над mthods, не работают. работает правильно при вызове.
Код: Выделить всё
@Component
Class A{
}
@Component
Class B {
}
@Component
Class c{
}
@Component
Class D{
@Atowired
A a;
B b;
C c;
@Autowired
public D(B b,C c){
b=b;
c=c;
}
}
Код: Выделить всё
@RunWith(SpringJUnit4ClassRunner.class)
Class TestClass{
@MockBean
A mockA
@Mock
B mockB
@Mock
C mockC
@InjectMocks
D mockD
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);//Without this Constructor injection not working
when(mockA.getValue()).then("StringValA");
when(mockB.getValue()).then("StringValB");
when(mockC.getValue()).then("StringValC");
}
@Test
public void testMethod(){
mock.getAllValues();// It will call all injested bean method we are mocked in @before
}
}
code> иockC.getValue() возвращают значение null, но методockA.getValue() возвращается правильно при тестовом запуске.
Подробнее здесь: https://stackoverflow.com/questions/587 ... g-properly