模拟方法返回空而不是预期



我想使用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()注入正在测试的类中。您的测试将模拟此注入的依赖性,而不是正在测试的类。

您也可以使用文档中解释的间谍或部分模型,但这不是理想的。

相关内容

  • 没有找到相关文章

最新更新