主流Java Mock框架是否支持单语句内联创建Partial Mock?
Java主流Mock库内联创建Partial Mock方案
主流Java Mock库原生或通过简单封装即可支持单条语句创建Partial Mock同时定义方法行为,具体方案如下:
1. JMockit(原生完全匹配需求)
JMockit的MockUpAPI完全符合你给出的第二种写法,无需额外封装即可实现单语句创建+自定义方法实现,未被重写的方法默认走真实逻辑:
// 单语句完成Partial Mock创建与方法定义 Foo fooMock = new MockUp<Foo>() { @Mock String method1() { return "value"; } }.getMockInstance();
2. Mockito(原生支持+轻量封装可选)
你提到的Mockito常规两步写法可以合并为单语句,也可以自行封装出你期望的fluent调用风格:
原生单语句实现
通过mock方法的Answer重载参数直接定义规则:
Foo fooMock = Mockito.mock(Foo.class, invocation -> { // 自定义method1的返回值 if ("method1".equals(invocation.getMethod().getName())) { return "val1"; } // 其余方法调用真实逻辑 return Answers.CALLS_REAL_METHODS.answer(invocation); });
简单封装实现fluent风格
可以参照你找到的工具类思路,自己封装通用工具方法,即可实现类似你给出的第一种链式写法:
// 封装后使用示例,单语句完成所有配置 Foo fooMock = MockBuilder.mock(Foo.class) .when(Foo::method1).thenReturn("val1") .build();
3. Spock框架
如果使用Spock做测试框架,其Mock语法天生支持内联配置:
// Groovy语法,单语句定义Mock与方法行为 Foo fooMock = Mock(Foo) { method1() >> "val1" }
内容的提问来源于stack exchange,提问作者Erric
相关产品推荐
相关产品推荐

