如何模拟调用链 someService.method1().method2()

问题描述 投票:0回答:1

例如我有一堂课

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();
}
}
}

我的问题是:应该如何正确地模拟这个“链”方法?

java junit mockito mockmvc
1个回答
0
投票

我并不是说这是推荐的,也不是说这是一个好主意,但在这个简单的情况下,你可以指示 Mockito 让每个方法都递归地返回另一个模拟对象

@MockBean(answer = Answers.RETURNS_DEEP_STUBS)
SomeService someService;

来自文档

警告:常规的干净代码很少需要此功能!将其留给遗留代码。模拟模拟以返回模拟,返回模拟,(...),返回一些有意义的暗示违反德米特定律或模拟值对象(众所周知的反模式)。

© www.soinside.com 2019 - 2024. All rights reserved.