JUnit 5 Mockito Stubbing 引用方法并验证它是否被调用
JUnit 5 Mockito Stubbing Referenced Method and Verifying it was Called
我正在使用 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
值。如何参数化模拟方法引用?
我用一些 functional/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();
}
}
我正在使用 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
值。如何参数化模拟方法引用?
我用一些 functional/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();
}
}