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



我有一个注入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,并模拟 MyClassDaoEjb.read() method to return a的对象(而不是进行 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豆,所以这不起作用。我知道我可以用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);
}

最新更新