Не работают тесты (TestNG) web-приложение java

162
03 ноября 2018, 10:40

Я только учусь, не судите строго за вопрос, а еще лучше - помогите. Сборка gradle. Сконфигурировал connection pool и hibernate в applicationcontext.xml spring(в этом же файле и описаны параметры подключения к базе данных). При развертывании на сервере все работает, но тесты стали failed(nullPointerException, так как session = null), что необходимо сделать чтобы в тестовый класс попадали параметры подключения к тестовой базе данных(sessionfactory был autowired при выполнении теста и следовательно session не была пустой)? структура проекта:

src-main-java-MySqlDaoFactory.java
        -resources-conn.properties
        -webapp-WEB-INF-applicationcontext.xml
   -test-java-MySqlDaoFactoryTest.java
        -resources-testng.xml

тест:

    package students;
    import students.*;
    import org.testng.annotations.AfterClass;
    import org.testng.annotations.BeforeClass;
    import org.testng.annotations.Test;
    import static org.testng.Assert.assertNotNull;
    import org.hibernate.Session;
    public class MySqlDaoFactoryTest {
    static MySqlDaoFactory daoFactory;
    @BeforeClass
    static void initAll() {
        daoFactory = new MySqlDaoFactory();
    }
    @Test
    void connectionTest() throws DAOException {
        Session session = daoFactory.getSession();
        assertNotNull(session, "Connection failed");
    }
}

класс который тестирую:

public class MySqlDaoFactory{
    @Autowired
    private SessionFactory sessionFactory;
    private Session session;
    public Session getSession() throws DAOException {
        try {
            session = sessionFactory.openSession();
        } catch (Exception e) {
            throw new DAOException("Error of session", e);
        }
        return session;
    }
}

testng.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Suite">
  <test thread-count="1" name="DAOTest">
    <classes>
      <class name="MySqlDaoFactoryTest"/>
    </classes>
  </test>
</suite>

applicationcontext.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
     ....
    default-autowire="byName">
    <context:component-scan base-package="students" />
    <context:annotation-config/>
    <context:property-placeholder location="classpath:conn.properties" />
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
  <property name="driverClassName" value="${driver}"/>
  <property name="url" value="${url}"/>
  <property name="username" value="${username}"/>
  <property name="password" value="${password}"/>
</bean>
    <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</prop>
            </props>
        </property>
    </bean>
    <bean id="MySqlDaoFactory" class="MySqlDaoFactory">
    </bean>
    <bean id="session" class="MySqlDaoFactory"
    factory-bean="MySqlDaoFactory" factory-method="getSession">
    </bean>
</beans>
Answer 1

Вы должны указать откуда брать контекст, чтобы Spring понимал, как инжектить данные.

Для Unit-тестов отделяют основной app_context и test_context. Для этого над тестовым классом нужно указать откуда брать нужный вам контекст. Для этого в спринге есть @TestPropertySource, который позволяет подгрузить указанный контекст.

Для вашего случая будет примерно так

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {BaseTestConfig.class})
@TestPropertySource(value = "classpath:applicationcontext_test.xml")
public class MySqlDaoFactoryTest {

создаете в ресурсах applicationcontext_test.xml и настраиваете, скажем, in mem db h2

READ ALSO
Записать ArrayList&lt;String[]&gt; в txt файл

Записать ArrayList<String[]> в txt файл

Подскажите пожалуйста, как записать большой (5000 строк) ArrayList<String[]> в файл через разделительString[] состоит из 13 элементов

170
Ошибка 500 The server encountered an unexpected condition that prevented it from fulfilling the request. (tiles, JSP, Java)

Ошибка 500 The server encountered an unexpected condition that prevented it from fulfilling the request. (tiles, JSP, Java)

Пытался прикрутить к простейшему проекту tiles из примера https://o7planningorg/ru/11683/spring-boot-apache-tiles-jsp-tutorial все вроде делал по писанному, за исключением...

178
Android Studio, не работает get запрос

Android Studio, не работает get запрос

Делаю практическое задание для универа на Android Studio, мне нужно делать get запросы к странице, чтобы получать данные с БД, но ни один из найденных...

181