2013-02-01 53 views
0

我有一些問題,運行一些與春季junit亞軍測試。春季測試道路

我使用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聲明和其他一些方法,但我無法讓它工作。

回答

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; 

    // ... 
} 

問候,

山姆

+0

謝謝!這是事實上,導入一個類會忽略我的課堂配置類,一定讓我絆倒了。 – CorayThan