Я не могу ввести весенние бобы в тест с помощью TestNG launcher (многопоточность)


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

    @Inject
    private AccountDao accDao; //ALLWAYS NULL

Я запускаю тест с помощью:

TestNG testNG = new TestNG();

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

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>

Почему я не могу ввести какой-либо боб в тест?

Примечание : я использовал @Autowired, и он тоже не работал.

Один прием сахара-это введение сеанса в основной метод, который я использовал для выполнения теста. Есть ли способ сделать это?

1 2

1 ответ:

Я решил эту проблему, создав статический класс и введя зависимости в этот класс в контроллере.

Контроллер:

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