【问题标题】:Testing Dao with Spring用 Spring 测试 Dao
【发布时间】:2013-01-16 07:56:47
【问题描述】:

我在使用 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,那么它会运行,但将它作为弹簧测试运行的唯一目的是让我可以测试真正的弹簧配置NodeDao

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

【问题讨论】:

    标签: java spring spring-test


    【解决方案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;
    
      // ...
    }
    

    问候,

    山姆

    【讨论】:

    • 谢谢!事实上,导入一个类会忽略我的类内配置类,这一定是让我绊倒的事实。
    猜你喜欢
    • 2012-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多