使用 Mockito 对流畅的界面进行单元测试

Unit testing a fluent interface with Mockito

我想模拟构建器模式中使用的 DAO 接口,如下所示。但是,当我 运行 下面的测试通过时,表明我的模拟对象从未被调用过。我做错了什么?

public class DBContent {
    ...

    public static class Builder {

        DAO dao = new DAO();
        ...

        public Builder callInsert() {
            ...
            long latest = dao.insert();
            ...
        }
    }
    ...
}

@RunWith(MockitoJUnitRunner.class)
public class DBContentTest {

    @Mock
    DAO dao;

    @Test
    public void test() {
        when(dao.insert()).thenReturn(1111L);
        DBContent db = DBContent.db()
                .callInsert()
                .callInsert()
                .callInsert()
                .build();
        verifyZeroInteractions(dao);
    }
}

改用 PowerMockito。在那里你可以定义每当你调用 DAO 的构造函数时,return 我的模拟对象而不是 returning 实际的 DAO 对象。
请参考 this 了解如何使用 PowerMockito。