Cómo escribir casos de prueba JUnit para createNativeQuery de EntityManager con parámetros String y clase.
@Repository
public class DesignatorDaoImpl extends GenericDaoImpl implements DesignatorDao {
@Autowired
EntityManager em;
public List<designator> getDesignators(DesignatorRequestDTO dto) throws Exception {
List<designator> designatorsList = new ArrayList<>();
int start = dto.getStart();
String queryString = "select * from ( SELECT * FROM TAB.DESIGNATOR WHERE ACTIVE_IND ='A' ORDER BY LAST_EDITED_DATE DESC ) OFFSET "+ start +" ROWS FETCH NEXT "+dto.getLimit()+" ROWS ONLY";
Query query = em.createNativeQuery(queryString,Designator.class);
designatorsList = query.getResultList();
return designatorsList;
}
}
@Transactional
@Rollback(true)
public class DesignatorDaoImplTest {
@Mock
EntityManager entityManagerMock;
@Mock
TypedQuery<designator> getQuery;
@InjectMocks
DesignatorDaoImpl designatorDaoImpl;
DesignatorRequestDTO dto = new DesignatorRequestDTO();
List<designator> designatorEntityList = new ArrayList<>();
@Before
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
dto.setLimit(4);
dto.setStart(1);
Designator entity = new Designator();
entity.setId("dgbkk");
designatorEntityList.add(entity);
}
@Test
public void saveDesignatorTest() throws Exception {
Mockito.when(entityManagerMock.createNamedQuery(ArgumentMatchers.anyString(), ArgumentMatchers.eq(Designator.class))).thenReturn(getQuery);
Mockito.when(getQuery.getResultList()).thenReturn(designatorEntityList);
assertNotNull(designatorDaoImpl.saveDesignators(dto));
}
}
“`
davy.ai
Dado que el método
em.createNativeQuery()
es parte de la clase EntityManager que está siendo simulada en la clase de prueba, necesitamos especificar el comportamiento de este método en la clase de prueba usando el métodoMockito.when()
. Para simular adecuadamente el métodoem.createNativeQuery()
, podemos modificar el métodosetUp()
en la clase de prueba de la siguiente manera:Creamos un objeto simulado de la clase Query y especificamos que el método
entityManagerMock.createNativeQuery()
debe devolver este objeto simulado cuando se llame con cualquier argumento de cadena. También especificamos que el métodogetQuery.getResultList()
debe devolver la variabledesignatorEntityList
.Alternativamente, también podemos utilizar el método
PowerMockito.mockStatic()
para simular el comportamiento del métodocreateNativeQuery()
. Aquí tienes un ejemplo de cómo hacerlo:Este método utiliza el método
PowerMockito.mockStatic()
para simular el comportamiento del métodocreateNativeQuery()
en la claseDesignatorDaoImpl
, pasando el nombre de la clase y la firma del método.