我有一个简单的控制器,例如

@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正在以某种方式创建依赖关系链? (它具有某些依赖性,但某些@MockBean似乎完全不相关)。

问题是,我为不同控制器添加的每个@WebMvcTest也需要相同的@MockBean

是否应该使用@TestConfiguration之类的注释为DRY主体指定所有@MockBean

最佳答案

我再次查看了此内容,发现可以将控制器名称传递给@WebMvcTest,例如@WebMvcTest(FooController.class)


指定要测试的控制器。如果所有{@code
@Controller} bean应该添加到应用程序上下文中。

关于spring-mvc - 避免@MockBeans在Spring Boot @WebMvcTest测试中扩散,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49084504/

10-11 02:40