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

标签 java tdd mockito

我目前正在阅读《成长的面向对象设计 - 由测试引导》一书。作者是本书中使用的 JMock 的创建者。由于 Mockito 目前拥有最具表现力(可读)的 API,因此我使用 Mockito 而不是 JMock。

对于大多数示例来说,到目前为止,这种方法效果很好,代码也少得多。不过,了解 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();
    }
}

不幸的是,when(T methodCall) 无法处理对象比较。 sut.something() 之后的assertEquals 在这里对我没有帮助,因为状态可能在doSomething 中发生了多次变化。

我确信一定有办法解决这个问题。如果旧的 JMock 有 Mockito 没有的功能,那会很奇怪:-) ...我就是找不到它。

最佳答案

您需要的是一个称为Answer的东西 - 这是一个对象,它包装了一小块代码,这些代码将在调用您的方法时运行。使用 Answer 的语法在 http://docs.mockito.googlecode.com/hg/latest/org/mockito/Mockito.html#11 中描述。

在您的Answer中,您可以使用断言来检查其他对象的状态是否符合您的需要。最后,您可以进行验证,以确保调用了该方法。

关于java - Mockito - 根据另一个对象状态验证方法调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22741941/

相关文章:

java - 尝试封装时获取 "Null Object Reference"

Java JFrame访问进度条

c# - MS 测试断言检查

video - 测试驱动开发演示

Java 虚拟机的字节序

java - GWT : How to call SERVLET FROM GWT_SERVLET and How to return value from target servlet to source servlet?

java - 如何对 Eclipse 插件进行单元测试?

java - 此处检测到错位的参数匹配器。您不能在 Mockito 中的验证或 stub 之外使用参数匹配器

java - Mockito 模拟类返回 Null

java - 如何在其他方法调用中使用传递的参数?