Saya sedang membangun EJB Project, menggunakan JPA untuk query data. Sekarang, saya membuat unit test dan menggunakan mockito untuk mock data. Ada fungsi yang saya panggil data dari criteria builder, dan itu dipanggil dari @PostConstruct. Jadi jika hasilnya kosong, maka akan membuang NoResultException. Namun, saya tidak dapat menjalankan unit test untuk mengujinya. Perhatikan kode sumber di bawah ini:

Untuk kelas RefdataUpdateDaoImpl

public class RefdataUpdateDaoImpl{
    public RefdataUpdate getSingleUpdate() {
        CriteriaBuilder cb = getCriteriaBuilder();
        CriteriaQuery<RefdataUpdate> query = cb.createQuery(RefdataUpdate.class);
        Root<RefdataUpdate> rootEntry = query.from(RefdataUpdate.class);

        CriteriaQuery<RefdataUpdate> all = query.select(rootEntry);
        TypedQuery<RefdataUpdate> allQuery = getEntityManager().createQuery(all);
        return allQuery.getSingleResult();
    }
}

Dalam RefDataCacheBean

@PostConstruct
private void postConstruct() throws Exception{
    cachedUpdateTs = RefdataUpdateDaoImpl.getLastUpdate();
}

Ini adalah pengujian unit

@Test(expected = NoResultException.class)
    public void testExistingRefDataUpdate() throws NoResultException{
        update.deleteRefDataUpdate();
        refdataServiceBean.getLastUpdate();
    }

Jadi dalam pengujian unit, ia memuat data dari dataset xml. Jadi ketika saya menjalankan tes, seharusnya melempar NoResultException dan tes lulus, tetapi tes gagal dan log konsol tidak ada data entitas yang ditemukan.

Tolong bantu untuk membuat unit test dalam kasus ini, ketika fungsi dipanggil dari @PostConstruct.

Log Jejak:

javax.ejb.EJBException: javax.persistence.NoResultException: No entity found for query

Terima kasih dan komentar apa pun akan dihargai.

0
Tran Tam 15 Januari 2018, 17:28

1 menjawab

Jawaban Terbaik

Jelas NoResultException bersarang di EJBException sehingga kode pengujian Anda harus:

@Test(expected = EJBException.class)
public void testExistingRefDataUpdate() throws NoResultException{
    update.deleteRefDataUpdate();
    refdataServiceBean.getLastUpdate();
}
0
Simon Martinelli 15 Januari 2018, 15:17