模拟java对象进行单元测试

时间:2009-10-28 06:14:46

标签: java unit-testing mocking

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

干杯,

5 个答案:

答案 0 :(得分:11)

试试Mockito,你一定会喜欢它!

您可以在此blog post中查看此库,其中显示了6个简单的Mockito用法示例。

一个简短的例子:

@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);
}

答案 1 :(得分:3)

Java提供了各种各样的模拟库:

  • EasyMock,可以说是目前最受欢迎的模拟图书馆。功能广泛,使用方便。
  • Mockito,最初基于EasyMock的代码,使用类似的范例进行模拟,但自动执行多项任务,例如切换模拟对象状态(即记录,重放,验证,重置
  • jMock,基于Hamcrest Matchers的嘲笑。没有亲自使用过这个,但从我的理解来看,它至少是不错的。

...而且很可能是其他一些我从未听说过的较少使用的库。

由于您的要求是 JDK 1.4.2支持,不幸的是,您可以选择旧版本的EasyMock或旧版本的jMock。甚至Java5的支持也将在两天后结束(30 October 2009, that is!),所以如果可能的话,尝试从1.4.2时代开始 - 你(和/或你的公司)只是远远的在其他人之外,在任何一种严肃的技术支持之外。

答案 2 :(得分:2)

你为什么不试试Easymock或Mockito

答案 3 :(得分:1)

我用 jUnitjMock

答案 4 :(得分:1)

没有人选择了这个,但你为什么试图模仿私人方法呢?这几乎总是一个坏主意,因为它破坏了封装。

相关问题