Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring 干弹簧注释配置测试_Spring_Testing_Spring Test - Fatal编程技术网

Spring 干弹簧注释配置测试

Spring 干弹簧注释配置测试,spring,testing,spring-test,Spring,Testing,Spring Test,因此,我正在进行一些Spring测试,这些测试需要使用注释进行依赖项注入: @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(loader=AnnotationConfigContextLoader.class) public class BeanTest { @Autowired private SomeService someService; @Configuration static class

因此,我正在进行一些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 {}
}
好像不管用。有人能建议一种干燥的方法吗


谢谢

您应该可以这样做

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

  @Autowired
  private SomeService someService;

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

另外,您不需要提及
注释configContextLoader
,Spring按惯例将自动拾取用
@Configuration
注释的静态内部类,并使用适当的ContextLoader

您可以在contextconfiguration注释中声明配置类。从文档中删除

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

文档中的示例

@ContextConfiguration(classes = TestConfig.class)
public class ConfigClassApplicationContextTests {
    // class body...
}

看起来@Import注释需要替换内部类和注释。如果您可以删除它,我可以接受这个…不是
MyContextConfiguration
,而是上面示例中的
ContextConfiguration
,因为这是导入
MyContextConfiguration
,所有这些bean都应该在测试中可见..基本上是任何用@Configuraiton注释的静态类..下面是一篇关于默认值的详细信息的小博客文章-