使用 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 a
MyClass` 对象(而不是创建 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);
}
}
问题是我不知道如何连接 bean
和 dao
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);
}
我有一个注入 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 a
MyClass` 对象(而不是创建 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);
}
}
问题是我不知道如何连接 bean
和 dao
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);
}