使用 Mockito 在另一个 EJB 中模拟一个 EJB

Mocking an EJB inside another EJB with Mockito

我有一个注入 DAO EJB 的主 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;
     }
}

现在,我想使用 jUnit + Mockito 测试 MainEjb.someMethod(),在测试中注入真实的 MainEjb,并模拟 DaoEjb.read() method to return aMyClass` 对象(而不是创建 jdbc调用):

@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);
    }

}

问题是我不知道如何连接 beandao bean,所以这不起作用。我知道我可以用 Arquillian 做到这一点,但我试图避免实例化容器。这可以用 Mockito 来完成吗?

你的例子对我有用。 我刚刚为 dao 添加了一条规则:

@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);
}