Mockito - 根据另一个对象状态验证方法调用

时间:2014-03-30 08:37:34

标签: java tdd mockito

我目前正在努力完成他的书#34;增长面向对象设计 - 以测试为指导"。作者是本书中使用的JMock的创建者。由于Mockito目前拥有最具表现力(可读)的API,我使用的是Mockito而不是JMock。

对于大多数示例而言,到目前为止,这种方法的代码更少。有趣的是,看看API如何在时间和框架(JMock - > EasyMock - > Mockito)中进化,并且仍然基于相同的概念。

无论如何:我需要验证在另一个对象状态具有特定值时调用mock方法。

public class TestSomething{

    private MyMockedInterface mock;
    private States state;

    @Test
    public void testMethod()
    {
        // I need something like
        when(state.equals(value)).verify(mock).method()

        sut.doSomething();
    }
}
不幸的是(T methodCall)无法处理对象比较。 sut.something()之后的assertEquals在这里不会帮助我,因为状态可能已经在doSomething中多次改变了。

我很确定必须有办法解决这个问题。如果老JMock有一个功能Mockito没有,那会很奇怪:-) ......我无法找到它。

1 个答案:

答案 0 :(得分:1)

你需要的东西叫做Answer - 这是一个包装一小段代码的对象,这些代码将在调用方法时运行。 http://docs.mockito.googlecode.com/hg/latest/org/mockito/Mockito.html#11

描述了使用Answer的语法

Answer中,您可以使用断言来检查其他对象的状态是否是您需要的状态。然后在最后,您可以执行verify,以确保调用该方法。