JUnit模拟,我应该使用哪个工具?

时间:2011-03-24 10:53:37

标签: java junit mocking mockito jmock

我来自PHP测试世界,我开始用Java进行测试。

我见过几种在JUnit中模拟SUT的工具,比如Mockito,SevenMock,ClassMock等。

我真的很感激我应该使用哪一个建议。

提前致谢!

3 个答案:

答案 0 :(得分:8)

我经常使用Mockito。 http://mockito.org/我没有使用过EasyMock,所以不能多说。

使用Mockito非常简单,但是您打算测试的类也应该处于解耦状态,这样可以更容易地进行测试。使用mockito,您将使用mocks对象实例化一个特定的类。

假设您有一个要测试的类,但想要模拟其中一个依赖项

final DepedencyToMockClass mockObject = mock(DepedencyToMockClass.class);
when(mockObject.getTestMethod()).thenReturn("Test");

现在可以在初始化目标类时注入此mockObject。

final ClassToTest test = new ClassToTest(mockObject);

Mockito使用反射来创建这些模拟对象。但是,如果你有一个依赖项,如果它被声明为final,那么mocking将会失败。

Mockito中另一个有用的方法是验证您可以在哪里验证模拟对象中的某些操作。在mockito偷看。但是在模拟对象中存在限制,在某些情况下,很难创建模拟对象,可能是外部/第三方代码。我认为在将它们注入测试目的时尝试实例化实际对象是很好的做法,Mockito帮助失败。

答案 1 :(得分:7)

答案 2 :(得分:3)

我一直在使用JMock一段时间。我个人认为生成的代码易于阅读,您可以轻松区分配额和期望:

context.checking(new Expectations() {{
        // allowances
        ignoring(parserState);
        allowing(factory).create(); will(returnValue(object));

        // expectations
        one(service).addSth(with(any(Integer.class)), with(sth));
    }});

其他强大功能包括:

  • 序列:按顺序调用。
  • 参数匹配器:hamcrest library
  • 状态:条件为真时的约束调用。