Example Seam 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 PersonListServiceBeanTest {
private final PersonListServiceBean objectUnderTest = new PersonListServiceBean();
private Injector injector;
private PersonService personServiceMock;
private InMemoryDatabaseUtil inMemoryDatabaseUtil;
@Before
public void setUp() {
injector = new Injector();
inMemoryDatabaseUtil = new InMemoryDatabaseUtil();
// inject seam logger
injector.injectSeamLogger(objectUnderTest);
// create personService mock
personServiceMock = EasyMock.createNiceMock(PersonService.class);
// inject personService mock
injector.injectSeamIn(objectUnderTest, "personService", personServiceMock);
// inject entity manager
injector.injectSeamIn(objectUnderTest, "entityManager", inMemoryDatabaseUtil.getEntityManager());
}
@Test
public void testSelectAllPerson() throws Exception {
createPersons();
// train the personServiceMock object
EasyMock.expect(personServiceMock.saveOrUpdate((Person)EasyMock.anyObject())).andReturn("success").anyTimes();
replayAll();
List<Person> all = objectUnderTest.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);
inMemoryDatabaseUtil.saveObject(person);
}
}
@After
public void tearDown() {
inMemoryDatabaseUtil.deleteAll();
}
private void verifyAll() {
EasyMock.verify(personServiceMock);
}
private void replayAll() {
EasyMock.replay(personServiceMock);
}
}