【发布时间】:2020-05-03 20:41:22
【问题描述】:
我正在使用 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 值。如何参数化模拟方法引用?
【问题讨论】:
-
我缺少 MockService 类,但由于 MockService 不是功能接口,因此无法编译并抱怨“对象不是功能接口”。
-
@Mock 字段不需要是功能接口。 Supplier 是方法引用正在实现的功能接口。
-
@HaimRaman 当approveCall 和dellCall 返回void 以外的东西时编译。