通过Eclipse运行Spring Boot应用程序可以获取测试类



我正在使用带有Gradle插件的STS开发一个Spring Boot应用程序。我有一个不同的测试配置,以防止我们的Selenium测试必须登录。

所以在src/test/java/etc中,我有这样的东西:

@Configuration
@EnableGlobalMethodSecurity(prePostEnabled = true)
@EnableWebSecurity
public static class SecurityConfig extends WebSecurityConfigurerAdapter
{
    @Override
    protected void configure(HttpSecurity http) throws Exception
    {   
        http.authorizeRequests().anyRequest().permitAll();
    }
}

而在src/main/java中,我有一个等价的类来配置登录等,要求所有页面都登录。

如果我通过Gradle插件(bootRun)运行应用程序,一切都很好。

但是,如果我直接通过Eclipse运行或调试它(例如,右键单击项目、run As->Spring Boot App或单击Spring或Java视图中的run/debug按钮),然后应用测试配置,因此无需登录即可访问所有页面。

我猜想,当我以这种方式启动应用程序时,测试类已经包含在类路径中了。有没有一种简单的方法可以防止这种情况发生?

当您从eclipse运行测试时,类路径由eclipse准备(而不是由maven或gradle准备)。

Eclipse每个项目只使用一个类路径,对依赖范围(如"compile"或"test")一无所知。因此类路径总是包含被引用项目的任何资源。

您无法更改eclipse的这种行为。您需要使用命名约定、概要文件等来避免意外使用测试资源。

至少Eclipse IDE版本:2022-12(4.26.0)具有允许从调试/运行配置类路径中排除测试代码的功能:

转到用于运行应用程序的运行/调试配置,选择"依赖项"选项卡,单击复选框"排除测试代码"。

您可以将@TestComponent附加到测试配置类中。在应用程序的组件扫描过程中,将跳过这些bean配置。根据组件扫描配置,您需要定义@ComponentScan排除筛选器:excludeFilters = @ComponentScan.Filter(value = TestComponent.class, type = FilterType.ANNOTATION))

相关内容

  • 没有找到相关文章

最新更新