powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Mockito: не инжектится Mock EntityManager через field injection
2 сообщений из 2, страница 1 из 1
Mockito: не инжектится Mock EntityManager через field injection
    #39117052
eklm86
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В тесте пишу
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
@RunWith(MockitoJUnitRunner.class)
public class UniqueConstraintValidatorTest  {
    @Mock
    private EntityManager entityManager;

    @InjectMocks
    private UniqueConstraintValidator validator;

    @Test
    testMethod() {



В данном случае mock должен инжектиться в инстанс UniqueConstraintValidator через field injection, как написано в документации mockito: http://docs.mockito.googlecode.com/hg/1.9.5/org/mockito/InjectMocks.html

Класс UniqueConstraintValidator
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
@Stateless
public class UniqueConstraintValidator implements ConstraintValidator<UniqueName, String> {

    //@Inject
    public EntityManager entityManager;


    @Override
    public void initialize(UniqueName constraintAnnotation) {}

    @Override
    public boolean isValid(String value, ConstraintValidatorContext context) {
        QClient client = QClient.client;
        JPAQuery query = new JPAQuery(entityManager);
        query.from(client);
        query.where(client.name.eq(value));
        List results = query.createQuery().getResultList();
 
        if (results.size() > 0) {
            return false;
        }
        return true;
    }

}



entityManager = null

Для чего мне понадобился мок в классе валидатора... Когда используется реальный EntityManager, при запуске теста в строке query.createQuery().getResultList(); выбрасывается
такой иксепшен:
авторorg.hibernate.AssertionFailure: null id in com.clients.entity.CClient entry (don't flush the Session after an exception occurs)

Это известная проблема и возникает она обычно при использовании unit-тестов. Другой возможный вариант её решения - очистить сессию hibernate, перед тем действием, которое вызывает ошибку. Но я не знаю как получить сессию в QueryDSL, который тут используется.
...
Рейтинг: 0 / 0
Mockito: не инжектится Mock EntityManager через field injection
    #39117135
eklm86
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Получился второй вариант: сброс сессии.
Код: java
1.
entityManager.setFlushMode(FlushModeType.COMMIT);


Пишем это перед проблемной строкой и всё работает.
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Mockito: не инжектится Mock EntityManager через field injection
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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