Я только учусь, не судите строго за вопрос, а еще лучше - помогите. Сборка 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>
Вы должны указать откуда брать контекст, чтобы 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
Виртуальный выделенный сервер (VDS) становится отличным выбором
Подскажите пожалуйста, как записать большой (5000 строк) ArrayList<String[]> в файл через разделительString[] состоит из 13 элементов
Пытался прикрутить к простейшему проекту tiles из примера https://o7planningorg/ru/11683/spring-boot-apache-tiles-jsp-tutorial все вроде делал по писанному, за исключением...
Делаю практическое задание для универа на Android Studio, мне нужно делать get запросы к странице, чтобы получать данные с БД, но ни один из найденных...