简体   繁体   English

我无法使用TestNG启动器将Spring Beans注入Test(多线程)

[英]I can not Inject Spring Beans into Test using TestNG launcher (Multithreading)

@TransactionConfiguration
@Transactional
@ContextConfiguration(classes=AnnotationConfigContextLoaderUtils.class)
@WebAppConfiguration
@RunWith(SpringJUnit4ClassRunner.class)
public class AnyTest extends TestMachine {

    @Inject
    private AccountDao accDao; //ALLWAYS NULL

I run the test with: 我运行测试:

TestNG testNG = new TestNG();

AppConfig.java AppConfig.java

@Bean
public SessionScope sessionScope(){
    return new SessionScope();
}

@Bean
public static PropertySourcesPlaceholderConfigurer propertyPlaceHolderConfigurer() {
    return new PropertySourcesPlaceholderConfigurer();
}

@Bean
public JdbcTemplate jdbcTemplate() throws ConfigurationException {
    return new JdbcTemplate(dataSource());
}

@Bean
public DataSource dataSource() throws ConfigurationException {
    DriverManagerDataSource dataSource = new DriverManagerDataSource();
    //DB INITIALIZE
}

@Bean(name = "sessionFactory")
    public LocalSessionFactoryBean sessionFactory() throws ConfigurationException {
        LocalSessionFactoryBean sessionFactoryBean = new LocalSessionFactoryBean();
        sessionFactoryBean.setDataSource(dataSource());
        sessionFactoryBean.setPackagesToScan("package.model");
        sessionFactoryBean.setHibernateProperties(hibProperties());
        return sessionFactoryBean;
    }

    @Bean
    public HibernateTransactionManager transactionManager() throws ConfigurationException {
        HibernateTransactionManager transactionManager = new HibernateTransactionManager();
        transactionManager.setSessionFactory(sessionFactory().getObject());
        return transactionManager;
    }

    private Properties hibProperties() {
        Properties properties = new Properties();
        properties.put("hibernate.hbm2ddl.auto", hibernateAuto);
        properties.put("hibernate.dialect", hibernateDialect);
        properties.put("hibernate.show_sql", showSQL);
        return properties;
    }

SpringMVCInitializer.java SpringMVCInitializer.java

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 dependency versions: 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>

Why I can't inject any bean to a test? 为什么我不能任何bean 注入测试?

Note : I used @Autowired and it did not work too. 注意 :我使用了@Autowired,它也无法正常工作。

One sugestion is inject the session in the main method I used to run the test. 一种建议是使用我用于运行测试的主要方法注入会话。 Is any way to make this? 有什么办法做到这一点?

I resolved this problem creating a Static Class and injecting the dependencies into this class in a controller. 我解决了创建静态类并将依赖项注入控制器中的此类的问题。

Controller: 控制器:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM