Spring Testing:如何启用bean的自动扫描

use*_*176 13 spring unit-testing spring-test

例如,现在我必须在每个测试类中完成

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(loader=AnnotationConfigContextLoader.class)
Run Code Online (Sandbox Code Playgroud)

我想摆脱

 @ContextConfiguration(loader=AnnotationConfigContextLoader.class)
Run Code Online (Sandbox Code Playgroud)

并希望Spring扫描我项目中的所有bean.

我怎样才能做到这一点?

Bij*_*men 47

你可以这样做:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
public class MyTest {

  @Test
  public void testSomething() {

  }

  @Configuration
  @ComponentScan("basepackage")
  public static class SpringConfig {

  }
}
Run Code Online (Sandbox Code Playgroud)

默认情况下@ContextConfiguration会查找带注释的静态内部类@Configuration,这就是为什么这个设置才有效.

您可以完全摆脱装载程序参数,这不是必需的


geo*_*and 7

如果你在xml文件中有弹簧配置,你会使用类似的东西:

@ContextConfiguration(locations="classpath:applicationContext.xml")
Run Code Online (Sandbox Code Playgroud)

如果您使用Java Config,那么您将使用

@ContextConfiguration(classes=Config.class)
Run Code Online (Sandbox Code Playgroud)

我在上面的示例中使用了通用名称,您当然需要适应项目的配置.

在这两种情况下,都需要为Spring启用Spring的组件扫描来拾取带注释的类.


Bar*_*ett 5

@SpringBootTest如果使用 Spring Boot,您也可以简单地添加。