Вы не должны вводить все зависимости.Вы должны использовать фреймворки, такие как Mockito, для симуляции / моделирования этих зависимостей, чтобы протестировать ваш EJB.Предположим, у вас есть следующий bean-компонент:
@Stateless
public class ServiceBean implements Service {
@Inject
private Dao dao;
public boolean insert(Someclass someClass){
return dao.insert(someClass);
}
}
Для этого вы должны использовать Mockito для имитации Dao
(который должен быть интерфейсом, а не конкретным классом) следующим образом:
@RunWith(MockitoJUnitRunner.class)
public class ServiceBeanTest {
@Mock
private Dao daoMock;
@InjectMocks
private ServiceBean bean;
@Test
public void testInsert() {
when(daoMock.insert(Matchers.any(SomeClass.class))).thenReturn(true);
assertTrue(bean.insert(new Someclass()));
}
}
Что здесь происходит:
- Mockito создает макет объекта из интерфейса
Dao
, который будет имитировать реализацию; - Этот макет будет введен в
ServiceBean
instance; - Используя метод
when
, вы указываете свой макет. - Ваш модульный тест проверяет только поведение
ServiceBean
, не выполняет никаких тестов на зависимости, которые должны быть проверены вдругой тестовый класс.Это позволяет вам изолировать компоненты в вашем классе.
Сайт Mockito содержит различные учебные пособия о том, как выполнить это правильно.