Я не использую какой-либо фреймворк, просто использую модуль maven war и хочу протестировать слой DAO, используя Juit 4 + Powermockito (впервые).
Моя идея - когда я вызываю CustomerDao для тестирования createCustomer.Первое утверждение этого метода следующее:
Session session = HibernateManager.getInstance().getSessionFactory().openSession();
Я хочу смоделировать этот вызов, чтобы я мог предоставить объект сеанса, который я построил в тестовом классе, используя следующий код:
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.powermock.modules.junit4.PowerMockRunner;
import com.dao.CustomerDao;
@RunWith(PowerMockRunner.class)
public class CustomerDaoTest {
private SessionFactory sessionFactory;
@Mock
CustomerDao customer=new CustomerDao();
@Before
public void setup() {
sessionFactory = createSessionFactory();
}
@Test
public void CustomerCreateAndDeleteTest() throws Exception {
// Want to mock here
int id=customer.createCustomer("Indian Customer", "India", "xyz@pk.com",
"234567890", "AB");
Assert.assertEquals(1, id);
}
private SessionFactory createSessionFactory() {
Configuration configuration = new Configuration().configure("hibernate.cfg.h2.xml");// Using H2 for testing only
sessionFactory = configuration.buildSessionFactory();
return sessionFactory;
}
}
Проблема:
- Когда я запускаю свой тестовый класс, я получаю сообщение об ошибке:
org.hibernate.internal.util.config.ConfigurationException: Unableвыполнить демаршаллинг в строке номер -1 и столбце -1 в RESOURCE hibernate.cfg.h2.xml.Сообщение: неожиданный элемент (uri: "http://www.hibernate.org/xsd/orm/cfg", local:" hibernate-configuration "). Ожидаемые элементы: <{} hibernate-configuration>
Но если я удалю аннотацию @RunWith(PowerMockRunner.class)
тогда я не получаю эту ошибку.
Как я могу издеваться над вызовом метода, который находится внутри метода createCustomer (), как показано ниже:
Session session = HibernateManager.getInstance().getSessionFactory().openSession();
Пожалуйста, объясните мне, как я могу написать блок юнит-теста для тестирования слоя DAO, который можетиспользуйте другой файл hibernate.cfg.xml
.