我有一个测试,我想在其中传递三个参数:
1.字符串
1.枚举
1.字符串数组
示例:
@ParameterizedTest
@CsvSource({
"/path/to/first/file.xlsx, FIRST, {THIRD PARAMETER SHOULD BE ARRAY OF STRINGS}",
"/path/to/second/file.xlsx, SECOND, {THIRD PARAMETER SHOULD BE ARRAY OF STRINGS}"})
void uploadFile(String path, FileType type, String[] errors) {
HttpEntity httpEntity = prepareFileUploadEntity(path, type);
ResponseEntity<ArrayList> response = getRestTemplate(AppRole.USER).exchange(UPLOAD_URL, HttpMethod.POST, httpEntity, ArrayList.class);
assertNotNull(response);
assertEquals(HttpStatus.BAD_REQUEST, response.getStatusCode());
assertEquals(errors.length, response.getBody().size());
for (String error : errors) {
assertTrue(response.getBody().contains(error));
}
}
我怎样才能把第三个参数作为一个字符串数组来传递呢,因为现在我遇到了第三个参数无法解析的错误:
org.junit.jupiter.api.extension.ParameterResolutionException: Error resolving parameter at index 2
3条答案
按热度按时间bkkx9g8r1#
@CsvSource
使用隐式转换将CSV值转换为基元、枚举或日期。对于其他类型(如数组),需要显式转换。假设您有一个格式类似
@CsvSource("abc, 123, 'foo, bar'")
的CSV注解,您可以实现一个如下所示的参数转换器,将最后一个CSV列视为一个数组:然后可以在第三个参数上使用该转换器:
2ul0zpep2#
小校正,in
应为不同的符号(例如'; ')而不是','
那么在测试中应该是
对我有效的最终版本:
试验:
dfddblmv3#
你可以很容易地做这样的事情:
它更简单,可读性更强。