Here is the source of this method.
The injector code:
import java.lang.annotation.Annotation;import java.lang.reflect.Field;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import javax.annotation.Resource;import javax.ejb.EJB;import javax.persistence.PersistenceContext;public class EJBTestInjector { private static final List<Class<? extends Annotation>> EJB_ANNOTATIONS; static { EJB_ANNOTATIONS = new ArrayList<Class<? extends Annotation>>(); EJB_ANNOTATIONS.add(EJB.class); EJB_ANNOTATIONS.add(PersistenceContext.class); EJB_ANNOTATIONS.add(Resource.class); } final Map<Class<?>, Object> mappings = new HashMap<Class<?>, Object>(); public void inject(final Object bean) throws Exception { for (final Field field : getEJBAnnotatedFields(bean)) { injectField(field, bean); } } public void assign(final Class<?> type, final Object instance) { mappings.put(type, instance); } private void injectField(final Field field, final Object bean) throws Exception { final Object instanceToInject = mappings.get(field.getType()); if (!field.isAccessible()) { field.setAccessible(true); } field.set(bean, instanceToInject); } private List<Field> getEJBAnnotatedFields(final Object bean) { final Class<? extends Object> beanClass = bean.getClass(); final List<Field> annotatedFields = new ArrayList<Field>(); for (final Field field : beanClass.getDeclaredFields()) { if (hasEJBAnnotation(field)) { annotatedFields.add(field); } } return annotatedFields; } private static boolean hasEJBAnnotation(final Field field) { for (final Class<? extends Annotation> annotation : EJB_ANNOTATIONS) { if (field.isAnnotationPresent(annotation)) { return true; } } return false; }} The example: final EJBTestInjector injector = new EJBTestInjector(); injector.assign(EntityManager.class, entityManagerMock); injector.assign(SessionTokenManager.class, sessionTokenManagerMock); injector.inject(<your EJBean>); That is all. Now you can unit test your ejb as well as other POJO.
Комментариев нет:
Отправить комментарий