java只模拟动作链中的特定类
我正在尝试用spring java编写测试
我上的课
public class A {
@Autowired
private B b;
public void handle() {
int xyz = b.call();
}
}
public class B {
@Autowired
private C c;
public int call() {
// Do something else here as well.
return c.callC();
}
}
public class C {
@Autowired
private D d;
public int callC() {
//do something with d
return 123;
}
}
我想给B类打电话,但想模拟C的反应。 不知道这是否可能
我的测试
@SpringBootTest
@RunWith(SpringRunner.class)
public class TestA {
@Autowired
private A a;
@Mock
private B b
@Mock
private C c
@Test
public void mytest() {
when(c.callC()).thenReturn(1);
A.handle();
verify(c, times(1)).callC();
}
}
但它实际上仍然在调用C类,而不是嘲笑它。 任何帮助都将不胜感激
# 1 楼答案
你的注解错了。 如果要使用SpringRunner/SpringExtension:
另一种方法是使用Mockito runner和@Mock/@InjectMocks
见Difference between @Mock, @MockBean and Mockito.mock()