0

所以,我正在做一些需要使用注解进行依赖注入的 Spring 测试:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(loader=AnnotationConfigContextLoader.class)
public class BeanTest {

  @Autowired
  private SomeService someService;

  @Configuration
  static class ContextConfiguration {
    @Bean
    public SomeService someService() {
        return new SomeService();
    }
  }
}

我真的不想在每次测试中都重复这段代码,但我尝试创建一个包含配置的基类:

@Configuration
class MyContextConfiguration {
   @Bean
   public SomeService someService() {
       return new SomeService();
   }
}

并由此得出:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(loader=AnnotationConfigContextLoader.class)
public class BeanTest {

  @Autowired
  private SomeService someService;

  @Configuration
  static class ContextConfiguration extends MyContextConfiguration {}
}

似乎不起作用。任何人都可以建议一种方法来干燥这个吗?

谢谢!

4

2 回答 2

1

您应该可以这样做。

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

  @Autowired
  private SomeService someService;

  @Configuration
  @Import(MyContextConfiguration.class)
  static class ContextConfiguration {
  ....
  }
}

此外,您无需提及AnnotationConfigContextLoader,Spring 按照惯例会自动拾取带有注释的静态内部类@Configuration并使用适当的 ContextLoader

于 2013-07-30T23:52:55.543 回答
1

您可以在 contextconfiguration-annotation 中声明配置类。从文档。

ContextConfiguration 定义类级元数据,用于确定如何为集成测试加载和配置 ApplicationContext。具体来说,@ContextConfiguration 声明了应用程序上下文资源位置或将用于加载上下文的注释类。资源位置通常是位于类路径中的 XML 配置文件;而带注释的类通常是 @Configuration 类。但是,资源位置也可以引用文件系统中的文件,注解的类可以是组件类等。

文档中的示例。

@ContextConfiguration(classes = TestConfig.class)
public class ConfigClassApplicationContextTests {
    // class body...
}
于 2014-12-29T12:22:42.090 回答