How to Mock EntityManagerFactory In JUNIT

3.7k Views Asked by At

JUNIT Test How To Mock Entity Manager Factory. i'm writing junit test case for Entity Manager Factory but here in side when (when().then()) getting null.

1

There are 1 best solutions below

13
On BEST ANSWER

Add @ExtendWith(MockitoExtension.class) at the top of you Test class.

Refer this https://www.javadoc.io/static/org.mockito/mockito-junit-jupiter/4.4.0/org/mockito/junit/jupiter/MockitoExtension.html

This code is working for me. You should remove @ExtendWith (SpringExtension.class). Also remove that Mockito.mock since we have added @Mock on top of those fields.

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import static org.mockito.Mockito.when;
    
@ExtendWith(MockitoExtension.class)
class TestClass {

    @Mock
    private EntityManager entityManager;
    @Mock
    private EntityManagerFactory entityManagerFactory;
    @Mock
    private CriteriaBuilder criteriaBuilder;
    @Mock
    private CriteriaQuery<User> criteriaQuery;

    @Test
    void getSearchData() {
        when(entityManagerFactory.createEntityManager()).thenReturn(entityManager);
        when(entityManager.getCriteriaBuilder()).thenReturn(criteriaBuilder);
        when(criteriaBuilder.createQuery(User.class)).thenReturn(criteriaQuery);
        when(criteriaQuery.from(User.class)).thenReturn(new Root<>());//you can also mock Root object
    }
}