0

我在使用 spring junit runner 运行一些测试时遇到了一些问题。

我正在为 spring 使用 Java 配置,所以我似乎找不到适合我的示例。

我要做的就是编写一个 junit 测试,我可以在其中使用我的一个 dao 类,并让它与 hibernate 和所有东西一起工作,但为此我需要将它加载到真正的 spring 上下文中。

我试过这样写我的测试类:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes=HibernateConfig.class, loader=AnnotationConfigContextLoader.class)

public class TestNodeDao {

    @Configuration
    @ComponentScan(basePackages = "com.orclands" )
    static class Config {

        @Bean
        public NodeDao nd() {
            NodeDao nd = new NodeDao();

            return nd;
        }
    }

    @Autowired
    private NodeDao nd;

但它不能在nodeDao. 它说NoSuchBeanDefinitionException

如果我尝试自动装配NodeDao,那么它会运行,但是将它作为弹簧测试运行的唯一一点是,我可以测试真正的 spring-configured NodeDao

我也试过没有组件扫描,有组件扫描但没有bean声明和其他一些方法,但我无法让它工作。

4

1 回答 1

1

两件事情...

  1. 无需声明加载程序。
  2. 一旦您声明了显式配置类,将不再检测默认值(即嵌套的静态配置类)。

所以尝试这样的事情:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes={HibernateConfig.class, TestNodeDao.Config.class})
public class TestNodeDao {

  @Configuration
  static class Config {

      @Bean
      public NodeDao nd() {
        return new NodeDao();
      }
  }

  @Autowired
  private NodeDao nd;

  // ...
}

或者甚至更清洁:

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

  @Configuration
  @Import(HibernateConfig.class)
  static class Config {

      @Bean
      public NodeDao nd() {
        return new NodeDao();
      }
  }

  @Autowired
  private NodeDao nd;

  // ...
}

问候,

山姆

于 2013-02-01T16:32:08.330 回答