mardi 7 mars 2017

EntityManager in Spring test

emphasized textI have class with EntityManager field:

@Service
public class ClientRepositoryImpl implements ClientRepository {
    @PersistenceContext
    private final EntityManager em;

    public ClientRepositoryImpl(EntityManager em) {
        this.em = em;
    }

    @Override
    @SuppressWarnings("unchecked")
    public List<Client> filterClients(ClientFilter filter) {
        return em.createNativeQuery(read("some.sql"), Client.class)
                .setSomeParameter(...)
                .getResultList();
    }
}

Also I have test class for this class:

@DataJpaTest
@ActiveProfiles("test")
@EntityScan("com.example.dao")
@RunWith(SpringRunner.class)
@AutoConfigureTestDatabase(replace = NONE)
@TestPropertySource(properties = {
        "spring.datasource.url jdbc:hsqldb:mem:PUBLIC;sql.syntax_ora=true",
        "spring.datasource.data classpath:/sql/test.sql",
        "spring.datasource.sql-script-encoding utf-8"
})
public class ClientRepositoryImplTest {

    @PersistenceContext
    private EntityManager em;

    private ClientRepository clientRepository = new ClientRepositoryImpl(em);

    @Test
    public void filterClientsTest() throws Exception {
        ClientFilter clientFilter = ClientFilter.builder()
                ...
                .build();

        assertEquals(asList(client1, client2, client3), clientRepository.filterClients(clientFilter));
        }
}

When I run test I got java.lang.NullPointerException, because em is null. How can I create or get from spring context EntityManager instance for my repository???

Aucun commentaire:

Enregistrer un commentaire