10

我正在使用带有 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 视图中的运行/调试按钮)然后应用测试配置,所以访问无需登录即可授予所有页面。

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

4

2 回答 2

2

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

Eclipse 每个项目只使用一个类路径,并且对依赖范围(如“编译”或“测试”)一无所知。所以类路径总是包含被引用项目的任何资源。

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

于 2017-04-09T08:00:03.297 回答
0

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

于 2017-07-21T13:37:57.497 回答