Using the abstract testcase

Example Seam/EJB component to test:

@Stateless
@Name("personListService")
public class PersonListServiceBean implements PersonListService {

    @In
    private EntityManager entityManager;

    @Logger
    private Log log;

    @In
    private PersonService personService;

    @SuppressWarnings("unchecked")
    public List<Person> selectAllPerson() {
        log.info("select all person");

        final Query query = entityManager.createQuery("from Person person");
        final List<Person> resultList = query.getResultList();

        for (Person person : resultList) {

            // do something here
            personService.saveOrUpdate(person);
        }

        return resultList;

    }

}

JUnit Test:

public class PersonListBeanTest extends AbstractTestcase<PersonListServiceBean> {

    public PersonListBeanTest() {
        super(PersonListServiceBean.class);
    }

    @Test
    public void testSelectAllPerson() throws Exception {
        createPersons();
        EasyMock.expect(this.getMock(PersonService.class).saveOrUpdate((Person) EasyMock.anyObject())).andReturn(
                "success");

        replayAll();
        List<Person> all = this.getObjectUnderTest().selectAllPerson();
        verifyAll();

        Assert.assertEquals(5, all.size());

    }

    private void createPersons() throws Exception {
        for (int i = 0; i < 5; i++) {
            Person person = new Person();
            person.setFirstname("firstname" + i);
            person.setLastname("lastname" + i);
            getDatabaseUtil().saveObject(person);
        }
    }

}