例如我有一堂课
class MyClass {
@Autowired
SomeService someService;
@RequestMapping("/somepath")
public Object myMethod(){
someService.method1().method2();
//method2 is void
...
}
和MvcTest
@AutoConfigureMockMvc
class MyClassTest{
@MockBean
SomeService someService;
@Test
void test1(){
//how should be mocked this methods?
doNothing().when(someService.method1().method2()) //??
final MvcResult result = mockMvc.perform(get(String.format("/somepath")))
.andExpect(status().isOk())
.andReturn();
}
}
}
我的问题是:应该如何正确地模拟这个“链”方法?
我并不是说这是推荐的,也不是说这是一个好主意,但在这个简单的情况下,你可以指示 Mockito 让每个方法都递归地返回另一个模拟对象:
@MockBean(answer = Answers.RETURNS_DEEP_STUBS)
SomeService someService;
来自文档:
警告:常规的干净代码很少需要此功能!将其留给遗留代码。模拟模拟以返回模拟,返回模拟,(...),返回一些有意义的暗示违反德米特定律或模拟值对象(众所周知的反模式)。