java - 控制器中未调用服务方法
问题描述
我的控制器类:
package some.pkg.controller;
@RestController
@RequestMapping(value="/api", produces="application/json")
public class MyController {
@Autowired
private IntSequenceFilter sequenceFilter;
@PostMapping("/odd")
public FilteredSequence filterOdd(@RequestBody SequenceRequest sequenceRequest) {
List<Integer> filteredSequence = sequenceFilter.process(sequenceRequest.getData());
return new FilteredSequence(filteredSequence);
}
}
我的服务等级:
package some.pkg.service;
@Service
public class IntSequenceFilter {
// ... Some code ...
}
这是我的测试:
package some.pkg.controller
@RunWith(SpringJUnit4ClassRunner.class)
@WebMvcTest(MyController.class)
public class MyControllerTest {
@Autowired
private MockMvc mockMvc;
@MockBean
private IntSequenceFilter sequenceFilter;
@Test
public void testFilter() throws Exception {
MvcResult response = mockMvc.perform(
MockMvcRequestBuilders.post("/api/odd")
.content("{\"data\":\"1;2;3;-1;-2;-3\"}")
.contentType(MediaType.APPLICATION_JSON_UTF8)
.accept(MediaType.APPLICATION_JSON)
)
.andExpect(status().isOk())
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
.andReturn();
// ... Some assertions ...
}
}
当我运行测试时,在控制器的filterOdd方法中没有调用sequenceFilter.process() 。有人可以帮我弄清楚这里有什么问题吗?
解决方案
我相信您说sequenceFilter.process()
的是不会通过检查 process() 方法中的日志语句来调用。
这是一个模拟,您需要模拟如下行为
Mockito.when (sequenceFilter.process (Mockito.any ())).thenReturn (sequences);
如果要调用实际的服务实现,请使用Spy
代替
@MockBean
private IntSequenceFilter sequenceFilter;
和
@SpyBean
private IntSequenceFilter sequenceFilter;
推荐阅读
- angular - 忽略角通用`renderModule``extraProviders`
- c# - 用于跳跃的 Unity 触摸检测
- c# - 如何使用 CSharpCodeProvider 传递变量?
- python - 运行简单的聊天机器人脚本时出现 utils.initialize_class 错误
- c# - 如何在 TableView 中的部分添加阴影
- json - 无法在 Laravel 中使用 axios 获取 json 文件
- flutter - Flutter 使用 for 循环从 api 中获取数据
- java - 如何避免重试添加测试注释?
- python - Python - 试图在 PI 的数字内查找邮政编码(范围为 100,000)
- winforms - 如何在 C++ Windows 窗体应用程序中全局保存用户数据