如何解决webmvctest中的负载依赖性
我有一个休息控制器,正在尝试进行单元测试:
它具有一些自动关联的依赖项
@RestController
@RequestMapping("/test")
public class TestController {
private final Dep1 dep1;
private final Dep2 dep2;
private final Dep3 dep3;
public TestController(final Dep1 dep1,final Dep2 dep2,final Dep3 dep3) {
this.dep1 = dep1;
this.dep2 = dep2;
this.dep3 = dep3;
}
}
我最近添加了dep3
@Service
public class Dep3 {
private final IValidator validator;
public Dep3(final IValidator validator) {
this.validator= validator;
}
public void validate(final Request req) {
validator.validate(req);
}
}
Dep3
有其自己的自动关联功能IValidator
这是我的考试班:
@WebMvcTest(TestController.class)
public class TestControllerTest {
@MockBean
private Dep1 dep1;
@MockBean
private Dep2 dep2;
@MockBean
private Dep3 dep3;
@Autowired
private MockMvc mockMvc;
@Test
public void someTest() throws Exception {
}
@TestConfiguration
static class InnerConfiguration {
@Bean
IValidator validator() {
return new SomeValidator();
}
}
}
对于我的测试,我需要使用实现dep3.validate(..)
实际运行SomeValidator()
的代码。我不确定如何实现这一目标。也许我缺少注释?
解决方法
您必须正确配置Mock。 像这样:
Mockito.when(dep3.validate(Mockito.any(Request.class))).thenReturn(new SomeValidator());
您可以在实际调用之前在测试方法或设置方法中执行此操作。
,不要嘲笑Dep3
。而是在Dep3
中配置@TestConfiguration
bean:
@TestConfiguration
static class InnerConfiguration {
@Bean
Dep3 dep3() {
return new Dep3(validator());
}
@Bean
IValidator validator() {
return new SomeValidator();
}
}
Spring会将完全配置的Dep3
注入TestController
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。