我想使用Mockito测试EJB。get()
方法以数据库查询的结果返回,并且transformedGet()
在Session 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);
}
您正在嘲笑正在测试的类。所有方法均被模拟,包括transformedget(),默认情况下返回null,因为您不告诉Mockito应该返回什么。
最好的做法是在一个单独的类中get()注入正在测试的类中。您的测试将模拟此注入的依赖性,而不是正在测试的类。
您也可以使用文档中解释的间谍或部分模型,但这不是理想的。