1
resposta

como mockar com natique query?

preciso testar um metodo que usa native query. Porém na linha

Query q = em.createNativeQuery(strQuery, Projeto.class);

Não se atribui valor nenhum a q e ele fica nulo. Alguém pode me ajudar?

Segue metodo que quero testar (que está na classe ProjetoServiceImpl) :

@Override
public  Page<Projeto> buscaAtestadosComFiltro(String[] filtros, PageRequest pageRequest) {
    String strQuery = montaQueryAtestadoComFiltro(filtros);
    Query q = em.createNativeQuery(strQuery, Projeto.class);
    Page<Projeto> result = new PageImpl<Projeto>(q.getResultList());
    return result;
}

e minha classe de teste:

@SpringBootTest
@RunWith(SpringRunner.class)
@ActiveProfiles("test")
public class ProjetoServiceImplTest {

  Projeto projeto1;

  @Mock
  private EntityManager manager;

  @InjectMocks
  private ProjetoServiceImpl projImpl = new ProjetoServiceImpl();

  @Before
  public void setup() {
    projeto1 = new Projeto();
    projeto1.setId(1L);
 }

 @Test
public void testaBuscaAtestadosComFiltro() {
    List<Projeto> projetos = new ArrayList<Projeto>();
    projetos.add(projeto1);

    Query query = mock(Query.class);

    Mockito.when(manager.createNativeQuery("java",Projeto.class)).thenReturn(query);
    Mockito.when(query.getResultList()).thenReturn(projetos);

    String[] filtros = new String[] {"java"};
    PageRequest pageRequest = new PageRequest(0, 12,Direction.valueOf("DESC"), "id");

    Page<Projeto> result = projImpl.buscaAtestadosComFiltro(filtros, pageRequest);
    assertNotNull(result);

}

Alguém pode me ajudar?

1 resposta

Oi

Posta o código do método montaQueryAtestadoComFiltro, por favor. Se achar mais fácil, pode subir o projeto todo no github que eu dou uma olhada por lá também

Abraço!