【问题标题】:Exclude beans in @WebMvcTest排除 @WebMvcTest 中的 bean
【发布时间】:2018-09-06 18:33:14
【问题描述】:

如果我有这样的主目录:

@SpringBootApplication
public class MyMain implements CommandLineRunner
{

   @Autowired
    private MyService myService;

    public static void main(String[] args)
    {
        SpringApplication.run(MyMain.class, args);
    }

    @Override
    public void run(String... args)
    {
        myService.doSomething();
    }
}

我有一些 @RestControllers 注释类。为了使用 @WebMvcTest 注释类测试它们,我必须在这些测试类中添加以下内容:

@MockBean
private MyService myService;

我没有使用此服务,我是否必须在所有 @WebMvcTest 注释类中添加此服务,或者有更好的方法吗?

以下 bean 也有同样的问题:

@MockBean
private SimpleRabbitListenerContainerFactory simpleRabbitListenerContainerFactory;

【问题讨论】:

    标签: spring spring-boot


    【解决方案1】:

    我认为你应该决定是否要使用注释来实现你想要完成的功能。

    更清楚一点:如果你想创建一个执行 http 请求的测试,那么你应该使用 @WebMvcTest,因为它会自动配置一些有用的东西,比如 spring security 和 MockMvc (official documentation)。

    如果您只是想测试没有 http 部分的特定方法,那么您可能不需要它。

    总而言之:关于使用(或不使用)注释的决定将与您想要执行的测试类型相关,而不是与您拥有的依赖关系。

    【讨论】:

    • 其实我用的是WebMvcTest和MockMvc,但是如果我不添加那些Mockbeans,测试就不能工作,因为上下文失败
    • 是的,当然,你想实例化一个依赖于服务的控制器。我认为您应该使用@MockBean。我想说的是,这不是@MockMvcTest 注释的问题。但是现在,如果我正确理解了您的问题,您想知道测试使用服务的方法与不使用服务的方法之间有什么区别。不同的是,在你使用服务的地方你会得到类似的东西:given(this.myService.method(...)).willReturn(...); 而且你不会在方法不使用服务的测试中拥有它。
    • 我问的是是否有任何方法可以为所有控制器创建一个父类,我们可以在其中配置一些东西,而不是在每个 WebMvcTest 中添加这些模拟豆。或者,如果我们可以创建一个特定的配置、配置文件或其他任何东西来避免这种情况
    猜你喜欢
    • 2021-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-19
    相关资源
    最近更新 更多