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

Mar*_*son 9 java eclipse gradle-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();
    }
}
Run Code Online (Sandbox Code Playgroud)

而在src/main/java我有一个等效的类配置登录等,需要登录所有页面.

如果我通过Gradle插件(bootRun)运行应用程序,一切正常.

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

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

Ste*_*com 2

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

Eclipse 每个项目仅使用一个类路径,并且不知道任何有关依赖范围的信息(例如“编译”或“测试”)。因此,类路径始终包含引用项目的所有资源。

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