想象一下,我有: 1 /我的RestController
@RestController
@RequestMapping("/v2/lists/")
public class ListController {
@Resource
MyService myService;
@GetMapping("/mock/test")
public ResponseEntity<String> touche() {
System.out.println(myService.action());
return new ResponseEntity<String>("ok", HttpStatus.ACCEPTED);
}
2 /我的服务层
@Service
public class MyService {
public String action() {
return "==> origin (not mocked)";
}
}
3 /我的测试班
@SpringBootTest
@RunWith(SpringRunner.class)
public class SCRIntegrationTest {
@Autowired
private ListController listController;
@Autowired
public WebApplicationContext wac;
@Mock
private MyService myService;
public MockMvc mockMvc;
@PostConstruct
private void init() {
DefaultMockMvcBuilder builder = MockMvcBuilders.webAppContextSetup(this.wac)
.alwaysDo(MockMvcResultHandlers.print());
this.mockMvc = builder.build();
MockitoAnnotations.initMocks(this);
Mockito.when(myService.action()).thenReturn("==> mocké");
ReflectionTestUtils.setField(listController, "myService", myService);
}
@Test
public void testIfServiceMocked() throws Exception {
ResultMatcher ok = MockMvcResultMatchers.status().isOk();
MockHttpServletRequestBuilder builder = MockMvcRequestBuilders.get("/v2/lists/mock/test");
MvcResult mvcResult = this.mockMvc.perform(builder).andExpect(ok).andReturn();
}
==>好吧,一切都很好。当测试询问端点时,我的方法myService.action()得到了很好的模拟。 现在,我想直接模拟Controller中的方法 这样....
1 /我的(新)RestController
@RestController
@RequestMapping("/v2/lists/")
public class ListController {
@GetMapping("/mock/test")
public ResponseEntity<String> touche() {
public String action() {
return "==> origin (not mocked)";
}
@GetMapping("/mock/test")
public ResponseEntity<String> touche() {
System.out.println(action());
return new ResponseEntity<String>("ok", HttpStatus.ACCEPTED);
}
2 /我的(新)测试班
@SpringBootTest
@RunWith(SpringRunner.class)
public class SCRIntegrationTest {
@Autowired
public WebApplicationContext wac;
@Mock
private ListController mock;
public MockMvc mockMvc;
@PostConstruct
private void init() {
DefaultMockMvcBuilder builder = MockMvcBuilders.webAppContextSetup(this.wac)
.alwaysDo(MockMvcResultHandlers.print());
this.mockMvc = builder.build();
MockitoAnnotations.initMocks(this);
Mockito.when(mock.action()).thenReturn("==> mocké");
}
@Test
public void testIfServiceMocked() throws Exception {
ResultMatcher ok = MockMvcResultMatchers.status().isOk();
MockHttpServletRequestBuilder builder = MockMvcRequestBuilders.get("/v2/lists/mock/test");
MvcResult mvcResult = this.mockMvc.perform(builder).andExpect(ok).andReturn();
}
==>是否可以直接从控制器(ListController)模拟方法操作? 我写了行代码
@Mock
private ListController mock;
和行
Mockito.when(mock.action()).thenReturn("==> mocké");
,但似乎不起作用。 预先感谢。