Mocked方法返回null而不是expect

时间:2016-06-18 11:43:58

标签: java unit-testing mockito

我想使用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);
}

1 个答案:

答案 0 :(得分:1)

你正在嘲笑被测试的班级。所有方法都被模拟,包含transformedGet(),默认情况下返回null,因为你没有告诉Mockito它应该返回什么。

最佳做法是将get()放在一个单独的类中,注入到被测试的类中。你的测试会模拟这个注入的依赖,而不是被测试的类。

您也可以使用spypartial mock,如文档中所述,但这并不理想。