【问题标题】:Mocking java object for unit test模拟单元测试的java对象
【发布时间】:2009-10-28 06:14:46
【问题描述】:

我正在寻找一个好的单元测试框架,我可以用它来模拟可以在 JDK 1.4.2 下运行的私有方法。

干杯,

【问题讨论】:

    标签: java unit-testing mocking


    【解决方案1】:

    试试Mockito,你会喜欢的!

    您可以在blog post 中查看这个库,其中展示了 Mockito 使用的 6 个简单示例。

    一个简短的例子:

    @Test
    public void iteratorWillReturnHelloWorld(){
        //arrange
        Iterator i = mock(Iterator.class);
        when(i.next()).thenReturn("Hello").thenReturn("World");
        //act
        String result = i.next() + " " + i.next();
        //assert
        assertEquals("Hello World", result);
    }
    

    根据您的要求进行编辑:

    Mockito 似乎在 Java 1.4 和 JUnit 3 上运行良好,如 blog post 中所述。

    与上面的示例相同,但适用于 Java 1.4:

    public void testIteratorWillReturnHelloWorld(){
        //arrange
        Iterator i = Mockito.mock(Iterator.class);
        Mockito.when(i.next()).thenReturn("Hello").thenReturn("World");
        //act
        String result = i.next() + " " + i.next();
        //assert
        assertEquals("Hello World", result);
    }
    

    【讨论】:

    • 这是我第一次看到 Mockito... 非常整洁。谢谢!
    【解决方案2】:

    有一整套可用于 Java 的模拟库:

    • EasyMock,可以说是目前最流行的模拟库。功能广泛,易于使用。
    • Mockito,最初基于 EasyMock 的代码,使用类似的范例进行模拟,但自动执行多项任务,例如切换模拟对象状态(即记录、重播、验证、重置
    • jMock,基于 Hamcrest Matchers 的嘲笑。没有亲自使用过这个,但据我了解,它至少还不错。

    ...很可能还有一些我什至没听说过的不太常用的库。

    由于您的要求是JDK 1.4.2 支持,不幸的是,这意味着您可以选择旧版本的 EasyMock 或真正旧版本的 jMock。甚至 Java5 的支持也将在两天内结束 (30 October 2009, that is!) 所以如果可能的话,尽量摆脱 1.4.2 时代 - 你(和/或你的公司)远远落后于其他人并且在任何形式的严肃技术支持之外。

    【讨论】:

    • 是的,我的公司在技术进步方面有点落后。我希望他们能尽快升级我正在维护的这个应用程序。
    【解决方案3】:

    你为什么不试试 Easymock 或 Mockito

    【讨论】:

      【解决方案4】:

      我用 jUnitjMock

      【讨论】:

        【解决方案5】:

        没有人知道这个,但你为什么要模拟私有方法?这几乎总是一个坏主意,因为它破坏了封装。

        【讨论】:

        • 现在我们正在维护一个写得不好的应用程序。一些类有非常大的私有方法,需要认真重构。作为这项工作的一部分,我们正在尝试围绕私有方法进行良好的单元测试,然后慢慢努力重构这些方法
        • 我仍然不认为模拟私有方法是一个好主意,还有其他技术。我假设你有 Feathers 的关于使用遗留代码的书?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-06-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-24
        • 2023-03-09
        • 1970-01-01
        相关资源
        最近更新 更多