mockito - JUnit 5 Mockito 存根引用的方法并验证它是否被调用
问题描述
我正在使用 JUnit5 及其ParameterizedTest
功能。如何使用方法引用作为数据源的一部分?
例子:
public enum Status {
APPROVE, DECLINE
}
@Mock
public MockService mockService;
// Normal Test
@Test
void testApprove() {
Mockito.doReturn(null)
.when(mockService)
.approveCall();
Mockito.verify(mockService).approveCall();
}
// Parameterized Test
Map<Status, Supplier<?>> mockMap = Map.ofEntries( // Java 9 method
Map.entry(APPROVE, mockService::approveCall),
Map.entry(DECLINE, mockService::declineCall)
);
@ParameterizedTest
@EnumSource(Status.class)
void test(Status status) {
Supplier<?> supplier = mockMap.get(status);
??
}
我希望我的第二个测试与我的第一个测试做同样的事情,但也涵盖了DECLINE
价值。如何参数化模拟方法引用?
解决方案
我使用了一些函数式/lambda 技巧来解决它。
public class MyTest {
public enum Status {
APPROVE, DECLINE
}
@Mock
public MockService mockService;
// Parameterized Test
Map<Status, MockitoVerifier> mockMap = Map.ofEntries( // Java 9 method
Map.entry(Status.APPROVE, () -> Mockito.verify(mockService).approveCall()),
Map.entry(Status.DECLINE, () -> Mockito.verify(mockService).declineCall())
);
@ParameterizedTest
@EnumSource(Status.class)
void test(Status status) {
MockitoVerifier<?> verifier = mockMap.get(status);
verifier.verify();
}
@FunctionalInterface
interface MockitoVerifier<T> {
T verify();
}
}
推荐阅读
- swift - 闭包存储在类属性中
- matlab - 使用 matlab 实现优化问题
- function - 接口中的函数重载在泛型中有所不同
- cassandra - cassandra:恢复部分丢失的数据
- css - 在 Moodle 课程格式插件中注入 CSS
- python-3.x - AttributeError:“属性”对象没有属性“__name__”
- mongodb - Mongodb如何更新数组中的最后一项
- php - Laravel 403 禁止自定义请求验证
- android - 为什么克隆Android源代码后目录“external/qemu”不见了?
- scala - 将数组的Dataset转换为DataFrame