【发布时间】:2019-03-13 03:58:02
【问题描述】:
我试图在我的测试中模拟一个依赖项的依赖项。下面是我的类的样子。
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 为空。 我的设置是否缺少某些东西,或者这是错误的方法?
谢谢。
【问题讨论】: