我试图在测试中模拟依赖关系的依赖性。以下是我的课程的样子。
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
,因为这将在执行测试方法文档之前将模拟豆注入应用程序上下文。
可用于在Spring ApplicationContext中添加模拟的注释。可以用作@configuration类中的类级注释或字段,或@runwith the 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();
}
}