[英]Mocking an Autowired dependency of a dependency in Spring tests
我正在嘗試在測試中模擬依賴項的依賴項。 下面是我的班級樣子。
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";
}
}
我在嘗試調用方法doA()時在類D中模擬方法doD(); 但是,我不想模擬B類中的doB()方法。下面是我的測試用例。
@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();
}
}
這仍然最終返回“ Hello”而不是“ Ola”。 在測試類中,我也在A上嘗試了@InjectMocks。 但這只會導致自動連線B依賴項B為空。 我的設置中是否缺少某些東西,或者這樣做是錯誤的方式?
謝謝。
使用@MockBean
因為這將在執行測試方法docs之前將模擬bean注入到應用程序上下文中。
可用於將模擬添加到Spring ApplicationContext的注釋。 可用作類級別的注釋或用作@Configuration類或@RunWith SpringRunner的測試類中的字段。
@RunWith(SpringRunner.class)
@SpringBootTest(
classes = MyTestApplication.class,
webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class ATest {
@Autowired
private A a;
@MockBean
private D d;
@Test
public void testDoA() {
doReturn("Ola")
.when(d)
.doD();
a.doA();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.