2009-10-28 60 views

回答

2

你为什么不尝试了EasyMock或

的Mockito
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); 
} 
+0

这是我第一次见到Mockito的经历......非常整洁。谢谢! – 2009-10-30 13:56:39

3

有提供全系列的嘲讽库为Java:

  • EasyMock,可以说是目前最流行的嘲弄库。广泛的功能,易于使用。
  • Mockito,原本基于EasyMock的代码,使用了类似的范例为嘲讽,但自动执行多项任务,如切换模拟对象的状态(即记录,回放,验证,重置
  • jMock,嘲讽基于Hamcrest匹配器。没有亲自使用过这个,但从我所了解的情况来看,这至少是体面的。

......并且很可能还有一些其他使用较少的库,我甚至没有听说过。

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

+0

是的,我的公司有点落后于技术的进步。我希望他们能够升级我即将维护的这个应用程序。 – zfranciscus 2009-10-29 01:13:57

1

没有人认识到这一点,但你为什么试图嘲笑私人方法?这几乎总是一个坏主意,因为它破坏了封装。

+1

那么现在我们正在维护一个写得不好的应用程序。一些类有非常大的私有方法,需要严肃的重构。作为这项工作的一部分,我们正在努力围绕私有方法进行良好的单元测试,然后慢慢地重新构建这些方法 – zfranciscus 2009-11-18 22:05:03

+0

我仍然认为嘲笑私有方法不是一个好主意,还有其他技术。我假设你有Feathers关于使用遗留代码的书? – 2009-11-19 13:21:15

相关问题