jeudi 3 août 2017

Testing Data Access Layer

my question is how do I test this 'delete' method? I can't put an ID for Message object since it is a generated value. So I can't use the findbyID(Integer id) method too.. Any help would be appreciated Thanks!

My Test

@Test 
public void testDelete(){
    System.out.println("delete");

    Message message = new Message();
   // message.setID(1) -> This is not allowed
    message.setSubject("Subject");
    message.setContent("Content");

    messageDAO.register(message);

    int count = messageDAO.getCount();
    assertEquals("Check if the message has been persisted into db", 1, count);



    messageDAO.delete(1); //returns null

    count = messageDAO.getCount();
    assertEquals("Check if the message has been deleted from db", 0, count);


}

DAO:

@Transactional
public void register(Message message) {
    em.persist(message);
}


@Transactional
public void delete(Integer id) {

 Message m =  getMessageById(id);
 em.remove(em.merge(m));

}

@Transactional
public Message getMessageById(Integer id){
    return em.find(Message.class, id);

}

@Transactional
public int getCount() {

      Query query = em.createNativeQuery("select count(*) from messages");
      int count = ((BigInteger) query.getSingleResult()).intValue();
      return count;
}

Aucun commentaire:

Enregistrer un commentaire