用Spring测试Dao

时间:2013-02-01 02:50:26

标签: java spring spring-test

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

我正在使用Java配置进行spring,所以我似乎无法找到适合我的示例。

我想要做的就是编写一个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,那么它就会运行,但是作为一个弹簧测试运行它的整个唯一的关键是我可以测试真正的弹簧配置NodeDao

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

1 个答案:

答案 0 :(得分:1)

两件事......

  1. 无需声明加载程序。
  2. 一旦声明显式配置类,将不再检测到默认值(即嵌套的静态配置类)。
  3. 所以尝试这样的事情:

    @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;
    
      // ...
    }
    

    此致

    萨姆