我正在使用带有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运行或调试它(例如右键单击项目,运行As-> Spring Boot App或单击 在Spring或Java视图中运行/调试按钮)然后应用测试配置,因此无需登录即可访问所有页面。
当我以这种方式启动应用程序时,我猜测测试类是否包含在类路径中。 有没有一种简单的方法可以防止这种情况发生?
答案 0 :(得分:2)
当你从eclipse运行测试时,类路径是由eclipse(而不是maven或gradle)准备的。
Eclipse每个项目只使用一个类路径,并且不了解依赖项范围(例如' compile'或' test')。 因此,类路径始终包含引用项目的任何资源。
你无法改变eclipse的这种行为。 您需要使用命名约定,配置文件等,以避免意外使用测试资源。
答案 1 :(得分:0)
您可以将@TestComponent
附加到测试配置类。在应用程序的组件扫描期间将跳过这些bean配置。根据组件扫描配置,您需要定义@ComponentScan排除过滤器:
excludeFilters = @ComponentScan.Filter(value = TestComponent.class, type = FilterType.ANNOTATION))