以功能接口作为源值的参数化 JUnit 5 测试
Parametrized JUnit 5 test with functional interface as source value
我可以将功能接口的测试参数化为源值吗?
我正在以这种方式测试具有多个字段的记录:
@Test
void instantiateWithInvalidName() {
thenThrowsIAE(() -> Sample.withName(""));
thenThrowsIAE(() -> Sample.withName(BLANK_STRING));
thenThrowsNPE(() -> Sample.withName(null));
}
@Test
void instantiateWithInvalidAddress() {
thenThrowsIAE(() -> Sample.withAddress(""));
thenThrowsIAE(() -> Sample.withAddress(BLANK_STRING));
thenThrowsNPE(() -> Sample.withAddress(null));
}
// ...
private static NullPointerException thenThrowsNPE(Executable exec) {
return assertThrows(NullPointerException.class, exec);
}
private static IllegalArgumentException thenThrowsIAE(Executable exec) {
return assertThrows(IllegalArgumentException.class, exec);
}
我想做这样的事情:
@ParameterizedTest
@ValueSource(classes = { Sample::withName, Sample::withAddress })
void instantiateWithInvalidField() {
thenThrowsIAE(() -> func.apply(""));
thenThrowsIAE(() -> func.apply(BLANK_STRING));
thenThrowsNPE(() -> func.apply(null));
}
我知道我可以通过以下参数以其他方式完成此操作:“”、BLANK_STRING 和 null。但我想逐场进行测试。我认为它更具可读性。
我想你可以这样试试:
@ParameterizedTest
@MethodSource("provideTestData")
void instantiateWithInvalidField(Function<String, String> func) {
thenThrowsIAE(() -> func.apply(""));
thenThrowsIAE(() -> func.apply(" "));
thenThrowsNPE(() -> func.apply(null));
}
private static Stream<Function<String, String>> provideTestData() {
return Stream.of(Sample::withAddress, Sample::withName);
}
我不知道,你的withAddress
和withName
方法是什么return,我假设String
,所以我把String
作为第二个在 Function<String, String> func
.
中通用
我可以将功能接口的测试参数化为源值吗?
我正在以这种方式测试具有多个字段的记录:
@Test
void instantiateWithInvalidName() {
thenThrowsIAE(() -> Sample.withName(""));
thenThrowsIAE(() -> Sample.withName(BLANK_STRING));
thenThrowsNPE(() -> Sample.withName(null));
}
@Test
void instantiateWithInvalidAddress() {
thenThrowsIAE(() -> Sample.withAddress(""));
thenThrowsIAE(() -> Sample.withAddress(BLANK_STRING));
thenThrowsNPE(() -> Sample.withAddress(null));
}
// ...
private static NullPointerException thenThrowsNPE(Executable exec) {
return assertThrows(NullPointerException.class, exec);
}
private static IllegalArgumentException thenThrowsIAE(Executable exec) {
return assertThrows(IllegalArgumentException.class, exec);
}
我想做这样的事情:
@ParameterizedTest
@ValueSource(classes = { Sample::withName, Sample::withAddress })
void instantiateWithInvalidField() {
thenThrowsIAE(() -> func.apply(""));
thenThrowsIAE(() -> func.apply(BLANK_STRING));
thenThrowsNPE(() -> func.apply(null));
}
我知道我可以通过以下参数以其他方式完成此操作:“”、BLANK_STRING 和 null。但我想逐场进行测试。我认为它更具可读性。
我想你可以这样试试:
@ParameterizedTest
@MethodSource("provideTestData")
void instantiateWithInvalidField(Function<String, String> func) {
thenThrowsIAE(() -> func.apply(""));
thenThrowsIAE(() -> func.apply(" "));
thenThrowsNPE(() -> func.apply(null));
}
private static Stream<Function<String, String>> provideTestData() {
return Stream.of(Sample::withAddress, Sample::withName);
}
我不知道,你的withAddress
和withName
方法是什么return,我假设String
,所以我把String
作为第二个在 Function<String, String> func
.