2014-03-30 84 views
0

我目前正在通过他的书“面向对象的设计 - 面向测试的指导”开展工作。作者是书中使用的JMock的创造者。由于Mockito目前拥有最具表现力(可读)的API,因此我使用的是Mockito而不是JMock。Mockito - 根据另一个对象状态验证方法调用

对于大多数例子来说,目前为止工作得很好,代码少得多。虽然看到API在时间和框架(JMock - > EasyMock - > Mockito)中的演变并且仍然基于相同的概念,这很有趣。

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

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

你需要的是一个叫做Answer的东西 - 这是一个包装了一小段代码的对象,它会在你的方法被调用时运行。使用Answer的语法描述如下:http://docs.mockito.googlecode.com/hg/latest/org/mockito/Mockito.html#11

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

相关问题