我想使用Mockito来测试EJB。 get()
方法返回数据库查询的结果,transformedGet()
执行会话bean中的业务逻辑。
如果直接调用mockFoo.get()
,它会按预期工作。
但是当mockFoo.transformedGet()
调用get()
方法时,它返回null而不是预期值。
我想测试业务逻辑,并隔离数据库查询。可以用Mockito做到这一点吗?
要测试的课程:
public class Foo {
public String get() {
return "get";
}
public String transformedGet() {
return "transformed" + get();
}
}
测试:
@Test
public void mockitoTest() {
Foo mockFoo = Mockito.mock(Foo.class);
String expected = "test";
Mockito.when(mockFoo.get()).thenReturn(expected);
String actual = mockFoo.get();
Assert.assertEquals(actual, expected);
String transformed = mockFoo.transformedGet();
Assert.assertEquals(transformed, "transformed" + expected);
}
答案 0 :(得分:1)
你正在嘲笑被测试的班级。所有方法都被模拟,包含transformedGet(),默认情况下返回null,因为你没有告诉Mockito它应该返回什么。
最佳做法是将get()放在一个单独的类中,注入到被测试的类中。你的测试会模拟这个注入的依赖,而不是被测试的类。
您也可以使用spy或partial mock,如文档中所述,但这并不理想。