2015-11-03 21 views
2
@TransactionConfiguration 
@Transactional 
@ContextConfiguration(classes=AnnotationConfigContextLoaderUtils.class) 
@WebAppConfiguration 
@RunWith(SpringJUnit4ClassRunner.class) 
public class AnyTest extends TestMachine { 

    @Inject 
    private AccountDao accDao; //ALLWAYS NULL 

Spring Bean注入到測試我運行測試。 java我不能用TestNG啓動器(多線程)

public class SpringMVCInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { 

    @Override 
    protected Class<?>[] getRootConfigClasses() { 
     return new Class<?>[] {AppConfig.class, SpringMVCConfiguration.class, SimpleCORSFilter.class}; 
    } 

    @Override 
    protected Class<?>[] getServletConfigClasses() { 
     return null; 
    } 

    @Override 
    protected String[] getServletMappings() { 
     return new String[] { "/" }; 
    } 
} 

Maven的依賴版本:

<spring-version>4.0.3.RELEASE</spring-version> 
<spring-test>4.0.3.RELEASE</spring-test> 
<testNG-Version>6.9.4</testNG-Version> 

<hibernate.version>4.1.5.Final</hibernate.version> 
<hibernate-validator>4.2.0.Final</hibernate-validator> 
<mysql.connector.version>5.1.32</mysql.connector.version> 
<dbcp.version>1.4</dbcp.version> 

爲什麼我不能注入任何bean來測試?

注意:我使用@Autowired,它也沒有工作。

一個消解是在我用來運行測試的主要方法中注入會話。 有什麼辦法可以做到這一點?

+0

哪裏是你的'AccountDao'豆? – darrengorman

+0

它是一個存儲庫事務處理 –

回答

0

我解決了這個問題,創建一個靜態類,並在控制器中注入這個類的依賴關係。

控制器:

@Controller 
public class InitController { 

@Inject 
public InitController(TestDao testDao, InsynctivePropertyDao propertyDao, ServletContext servletContext, AccountDao accDao, CrossBrowserAccountDao crossDao, CreatePersonFormDao createPersonFormDao, TestSuiteDao testSuiteDao) { 
    HibernateUtil.init(testDao, propertyDao, servletContext, accDao, crossDao, createPersonFormDao, testSuiteDao); 
} 
} 

HibernateUtil.java

public class HibernateUtil { 

public static CrossBrowserAccountDao crossDao; 
public static TestDao testDao; 

public static synchronized void init(TestDao testDao, InsynctivePropertyDao propertyDao, ServletContext servletContext, AccountDao accDao, CrossBrowserAccountDao crossDao, CreatePersonFormDao createPersonFormDao, TestSuiteDao testSuiteDao){ 
    HibernateUtil.crossDao = crossDao; 
    HibernateUtil.testDao = testDao; 
} 
}