Что мне нужно знать для написания модульных тестов, которые все получают доступ к базе данных (через JPA + Hibernate), чтобы они могли запускаться параллельно? Мы начали использовать функцию тестирования параллельного модуля mavens, и тест на тестирование завершился неудачно, что не происходит, когда они запускаются в одном потоке.Как написать тесты Junit против JPA, которые можно запускать параллельно?
Я приведу краткий пример того, как мы пишем наши тесты прямо сейчас. Мы установили EntityManager
и другие классы в @Before
, начните транзакцию и, наконец, вставьте тестовые данные, которые требуются всем нашим тестам в классе (в тестовом режиме создаются тестовые данные). @After
тест выполняется, мы все отбрасываем, вызывая Transaction.rollback();
и null
все переменные-члены. Мы запускаем все модульные тесты против hsqldb в памяти.
public class TestLogEntryDAO {
private EntityManager em;
private LogEntryDAO dao;
@Before
public void before() {
em = Persistence.createEntityManagerFactory("junit")
.createEntityManager();
dao = new DAOFactory<LogEntryDAO>(LogEntryDAO.class).newInstance(em,
Mockito.mock(ILogger.class));
em.getTransaction().begin();
RecordDAO recordDAO = new DAOFactory<RecordDAO>(RecordDAO.class)
.newInstance(em, Mockito.mock(ILogger.class));
recordDAO.setLogEntryDAO(dao);
createTestData(); // Is this ok?
}
@After
public void after() {
em.getTransaction().rollback();
em = null;
dao = null;
}
@Test
public void testSomething() {
// ...
}
}
Заранее благодарен!
Попробуйте сохранить каждый 'EntityManager' в' ThreadLocal', чтобы вы могли не переопределять экземпляры диспетчера сущностей, когда вы не хотите, чтобы они были переопределены. – Jeremy