【发布时间】:2018-03-03 13:12:06
【问题描述】:
我有一个简单的控制器,例如
@Controller
public class FooController
{
@Autowired
private BarService barService;
@RequestMapping(value = "/foo", method = RequestMethod.GET)
public String displayFoo()
{
return "foo";
}
}
当我想做@WebMvcTest 时,我必须创建大量@MockBeans 来防止NoSuchBeanDefinitionException。
@RunWith(SpringRunner.class)
@WebMvcTest
@Import(WebSecurityConfig.class)
public class FooControllerTest
{
@MockBean ...
@MockBean ...
@MockBean ...
...
...
}
这是否意味着BarService 以某种方式创建了一个依赖链? (它有一些依赖关系,但一些@MockBeans 似乎完全不相关)。
问题是,我为不同控制器添加的每个@WebMvcTest 也需要相同的@MockBeans。
我是否应该使用 @TestConfiguration 之类的注解来指定 DRY 主体的所有 @MockBeans?
【问题讨论】:
-
如果 FooController 只依赖于 BarService 如您的代码所示,您应该只需要一个用于 BarService 的模拟 bean。模拟 bean 没有任何依赖关系:它是一个模拟。
标签: spring-mvc spring-boot spring-boot-test