powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Как протестировать @Transactoipnal сервисный метод, обращающийся к Dao в spring
8 сообщений из 8, страница 1 из 1
Как протестировать @Transactoipnal сервисный метод, обращающийся к Dao в spring
    #38408673
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть такой метод(объявлен внутри @Transactional класса):
Код: java
1.
2.
3.
4.
public boolean delete(Integer id) {
        Vacancy vacancy = vacancyDao.findById(id);
        return vacancy != null && vacancyDao.remove(vacancy);
    }



Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
@Override
    public boolean remove(Vacancy vacancy) throws HibernateException {
        Session session = sessionFactory.getCurrentSession();
        if (vacancy == null) {
            return false;
        }

        int result = session.createQuery("delete from Vacancy where id = :id")
                .setInteger("id", vacancy.getId()).executeUpdate();// place 1
        return result > 0;//в дебаге вижу тут 1

    }



Надо его протестировать(знаю что при remove будет работать, но тут скорее более общий вопрос - как поступать в таких случаях).

такой тест:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
@Test
	public void delete(){
		vacancyService.delete(vacancy.getId());
		
		sessionFactory.getCurrentSession().flush();
		
		Vacancy vacancyFromDb = vacancyService.findById(vacancy.getId());	
		
		sessionFactory.getCurrentSession().flush();
		
		Assert.assertNull(vacancyFromDb);
	}



Тест падает. Хотя в логе я вижу:
Код: java
1.
Hibernate: delete from vacancy where id=?



Если это важно над тестом такие аннотации:
Код: java
1.
2.
3.
@TransactionConfiguration(defaultRollback = false)
@ContextConfiguration(locations = { "classpath:/test/BeanConfig.xml" })
public class AbstractServiceTest  extends AbstractTransactionalJUnit4SpringContextTests....
...
Рейтинг: 0 / 0
Как протестировать @Transactoipnal сервисный метод, обращающийся к Dao в spring
    #38408703
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в том, что метод реально работает - уверен потому, что если запустить тест с закоментаренной первой строчкой, то после выполнения теста в базе вакансия остается, в случае если ничего не комментировать - после теста в табличке базы пустота.
...
Рейтинг: 0 / 0
Как протестировать @Transactoipnal сервисный метод, обращающийся к Dao в spring
    #38408913
IDVsbruck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Batch processing (INSERT, UPDATE и DELETE) - не "автотранзакционные" (сорри за придуманный термин). Если сделан executeUpdate(), то нужно либо делать flush/clear после него, либо самому комиттить транзакцию.
...
Рейтинг: 0 / 0
Как протестировать @Transactoipnal сервисный метод, обращающийся к Dao в spring
    #38409116
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
IDVsbruck ,
Код: java
1.
2.
vacancyService.delete(vacancy.getId());		
		sessionFactory.getCurrentSession().flush();



а как же это ? чем не флаш?
...
Рейтинг: 0 / 0
Как протестировать @Transactoipnal сервисный метод, обращающийся к Dao в spring
    #38409119
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ну и термин я не понял, если честно
...
Рейтинг: 0 / 0
Как протестировать @Transactoipnal сервисный метод, обращающийся к Dao в spring
    #38409125
IDVsbruck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sessionFactory - вне DAO (Repository)? ))
Кстати, да - flush у меня также не сработал ни внутри @Repository, ни внутри @Service @Transactional. А вот с clear() внутри ДАО - да.
...
Рейтинг: 0 / 0
Как протестировать @Transactoipnal сервисный метод, обращающийся к Dao в spring
    #38409631
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
IDVsbrucksessionFactory - вне DAO (Repository)? ))
Кстати, да - flush у меня также не сработал ни внутри @Repository, ни внутри @Service @Transactional. А вот с clear() внутри ДАО - да.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
@Test
	public void delete(){
		vacancyService.delete(vacancy.getId());
		
		sessionFactory.getCurrentSession().flush();
		sessionFactory.getCurrentSession().clear();
		
		Vacancy vacancyFromDb = vacancyService.findById(vacancy.getId());	
		
		Assert.assertNull(vacancyFromDb);
	}



да - так сработало....

как всё сложно....
...
Рейтинг: 0 / 0
Как протестировать @Transactoipnal сервисный метод, обращающийся к Dao в spring
    #38413307
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я тут задумалcя:
Получается тест влияет на управление сессией ?
вот первый случай:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
@TransactionConfiguration(defaultRollback = false)
@ContextConfiguration(locations = { "classpath:/test/BeanConfig.xml" })
public class AbstractServiceTest  extends AbstractTransactionalJUnit4SpringContextTests{
       ....
       @Test
	public void delete(){
		vacancyService.delete(vacancy.getId());
		
		sessionFactory.getCurrentSession().flush();
		
		Vacancy vacancyFromDb = vacancyService.findById(vacancy.getId());	
		
		sessionFactory.getCurrentSession().flush();
		
		Assert.assertNull(vacancyFromDb);
	}
}


тут получается всё происходит в рамках сессии, которая открывается сразу после вызова метода и заканчивается перед его завершением
вот второй случай:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
@Controller
public class VacancyMenuController extends AbstractController{


   @RequestMapping("/path")
   public String delete(Model model){
                 vacancyService.delete(vacancy.getId());
		
		sessionFactory.getCurrentSession().flush();
		
		Vacancy vacancyFromDb = vacancyService.findById(vacancy.getId());	
		
		sessionFactory.getCurrentSession().flush();
		
		
    }
}



а тут на delete делается открытие сессии и закрытие
потом на findById то же самое.

Я правильно рассуждаю?
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Как протестировать @Transactoipnal сервисный метод, обращающийся к Dao в spring
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]