Дразнить EJB внутри другого EJB с Mockito - PullRequest
0 голосов
/ 24 января 2020

У меня есть основной EJB, который внедряет DAO EJB:

@Stateless
@LocalBean
public class MainEjb {

    @Inject
    private DaoEjb dao;

    public MyClass someMethod(int i) {
         return dao.read(i);
    }

}


@Stateless
@LocalBean
public class DaoEjb {

     public MyClass read(int i){
          // get MyClass object using jdbc
          return object;
     }
}

Теперь я хочу протестировать MainEjb.someMethod(), используя jUnit + Mockito, вводя в тесте реальный MainEjb и высмеивая DaoEjb.read() method to return a Объект MyClass` (вместо того, чтобы делать вызов jdb c):

@RunWith(MockitoJUnitRunner.class)
public class UserBeanUnitTest {

    @InjectMocks
    private MainEjb bean;

    DaoEjb dao = mock(DaoEjb.class);


    @Test
    public void testBean() {

        MyClass object = new MyClass();
        // set object fields

        assertThat(bean.someMethod(1)).isEqualTo(object);
    }

}

Проблема в том, что я не знаю, как соединить бины bean и dao, поэтому это не работает Я знаю, что могу сделать это с Arquillian, но я пытаюсь избежать создания экземпляра контейнера. Можно ли это сделать с помощью Mockito?

1 Ответ

1 голос
/ 24 января 2020

Ваш пример сработал для меня. Я просто добавил правило для дао:

@Test
public void testBean() {

    MyClass object = new MyClass();
    // set object fields
    Mockito.when(dao.read(Matchers.eq(1))).thenReturn(object);

    assertThat(bean.someMethod(1)).isEqualTo(object);
}
...