Я пытаюсь смоделировать зависимость в моих тестах.Ниже показано, как выглядят мои классы.
class A {
@Autowired B b;
@Autowired C c;
public String doA() {
return b.doB() + c.doC();
}
}
class C {
@Autowired D d;
public String doC() {
return d.doD();
}
}
class D {
public String doD() {
return "Hello";
}
}
Я пытаюсь смоделировать метод doD () в классе D при вызове метода doA ();Однако я не хочу издеваться над методом doB () в классе B. Ниже приведен мой тестовый пример.
@RunWith(SpringRunner.class)
@SpringBootTest(
classes = MyTestApplication.class,
webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT
)
public class ATest {
@Autowired
private A a;
@InjectMocks
@Spy
private C c;
@Mock
private D d;
@Before
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
}
@Test
public void testDoA() {
doReturn("Ola")
.when(d)
.doD();
a.doA();
}
}
В результате все равно возвращается «Привет» вместо «Ола».Я попробовал @InjectMocks на A также в тестовом классе.Но это просто приводит к тому, что зависимость B с автопроводкой B становится нулевой.Что-то не хватает в моей настройке или это неправильный путь?
Спасибо.