我来自 PHP 测试世界,我开始用 Java 进行测试。
我见过几种在 JUnit 中模拟 SUT 的工具,例如 Mockito、SevenMock、ClassMock 等。
我真的很感谢我应该使用哪一个的任何建议。
提前致谢!
我经常使用 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 则模拟将失败。
Mockito 中另一个有用的方法是验证您可以在哪里验证模拟对象中的某些操作。看看模仿。然而,模拟对象存在局限性,在某些情况下,可能很难创建模拟对象,可能是外部/第三方代码。我认为在为测试目的注入真实对象时尝试实例化真实对象是一种很好的做法,但 Mockito 会提供帮助。
Mockito 似乎是最常用的
编辑:
Mockito 与 JMockit 之间的比较 - 为什么 Mockito 的投票比 JMockit 好?
EasyMock vs Mockito:设计 vs 可维护性?
http://www.dahlibock.com/blog/2009/08/21/mocking-mockito-vs-easymock-example/
我已经使用JMock一段时间了。我个人喜欢生成的代码易于阅读,并且您可以轻松区分津贴和期望:
context.checking(new Expectations() {{
// allowances
ignoring(parserState);
allowing(factory).create(); will(returnValue(object));
// expectations
one(service).addSth(with(any(Integer.class)), with(sth));
}});
其他强大的功能包括: