在 Java 开发中,单元测试是保障代码质量的重要手段。而 Mockito 和 JMockit 是两个广泛使用的 Mock(模拟)框架,用于隔离被测代码的外部依赖,从而实现高效、可靠的测试。
Mockito 是一个轻量级、简洁易用的 Java Mock 框架,基于“行为验证”理念设计。它允许开发者创建和配置 mock 对象,并验证方法调用是否符合预期。
@Mock, @InjectMocks)JMockit 是一个功能强大的 Java 测试工具集,不仅能 mock 对象实例,还能 mock 静态方法、构造函数、final 类、私有方法等,无需修改生产代码。
如果你的项目结构清晰、依赖可通过接口注入,且不需要 mock 静态或 final 成员,Mockito 是更简洁、主流的选择。
若你需要测试难以解耦的遗留代码,或频繁涉及静态方法、单例、final 类等,JMockit 提供了更强的灵活性。
Mockito 示例:
MyService mock = mock(MyService.class);
when(mock.getData()).thenReturn("mocked");
assertEquals("mocked", mock.getData());
JMockit 示例:
@Test
public void testWithJMockit(@Mocked MyService service) {
new Expectations() {{
service.getData(); result = "mocked";
}};
assertEquals("mocked", service.getData());
}