如何在 jupiter Spring Boot 中使用 any()?
How to use any() in jupiter Spring Boot?
我正在尝试测试用于检索书籍的控制器方法。
出于某种原因,我想用下面的 when() 方法模拟的 uploadBook() 不是 return 对象。
@Test
void uploadNewBookTest() {
MockMultipartFile firstFile = new MockMultipartFile("book", "filename.txt", "text/plain", "some xml".getBytes());
Author author = new Author("John", "Doe", "john.doe@mail.ru");
BookDto bookDto = new BookDto("some title", "desc", "en-US", "Sci-Fi", "pdf", "2020-12-10", author.getEmail(), "sdd23421");
Mockito.when(bookUploadService.uploadBook(bookDto, firstFile))
.thenReturn(Optional.of(bookDto));
try {
mockMvc.perform(
MockMvcRequestBuilders.multipart("/books")
.file(firstFile)
.param("title", bookDto.getTitle())
.param("shortDescription", "asdf")
.param("publishedDate", bookDto.getPublishedDate())
.param("language", bookDto.getLanguage())
.param("genre", bookDto.getGenre())
.param("email", "hell")
)
.andExpect(status().isOk());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
为了让 .when() 看到匹配和 return 对象模拟对象,我想使用 any(Object.class) 但它似乎在 Jupiter5 中不起作用它在 JUnit4
中的工作方式相同
我想做如下的事情
Mockito.when(bookUploadService.uploadBook(any(BookDto.class), any(MultipartFile.class)))
.thenReturn(Optional.of(bookDto));
但是,它要求我将 any() 转换为该方法请求的参数。当我执行并执行时,它抛出一个转换异常。
任何人都可以帮助并告诉我我做错了什么或我错过了什么吗?
或者,如果您明白为什么我的 .when() 没有看到匹配项,我们将不胜感激。
这是我试图模拟的方法
public Optional<BookDto> uploadBook(BookDto bookDto, MultipartFile bookFile)
谢谢
any(Class<T> type)
是一个简单的 mockito 功能。
在编译时和运行时,它不能被 JUnit 破坏。
因此,使用 JUnit4 或 JUnit 5 不应更改 any()
行为,同时为您的测试 class 正确设置 Spring 单元测试配置,这是 JUnit 4 中兼容的 Spring Runner和 JUnit 5 中兼容的 Spring 扩展。
此外,您的原始代码是有效的,而使用 any()
进行模拟会在您的单元测试中设置一些弱点。
关于您当前的问题,我敢打赌您在某处使用了错误的导入,可能是 any()
。它应该是静态的 org.mockito.ArgumentMatchers.any
;
我正在尝试测试用于检索书籍的控制器方法。 出于某种原因,我想用下面的 when() 方法模拟的 uploadBook() 不是 return 对象。
@Test
void uploadNewBookTest() {
MockMultipartFile firstFile = new MockMultipartFile("book", "filename.txt", "text/plain", "some xml".getBytes());
Author author = new Author("John", "Doe", "john.doe@mail.ru");
BookDto bookDto = new BookDto("some title", "desc", "en-US", "Sci-Fi", "pdf", "2020-12-10", author.getEmail(), "sdd23421");
Mockito.when(bookUploadService.uploadBook(bookDto, firstFile))
.thenReturn(Optional.of(bookDto));
try {
mockMvc.perform(
MockMvcRequestBuilders.multipart("/books")
.file(firstFile)
.param("title", bookDto.getTitle())
.param("shortDescription", "asdf")
.param("publishedDate", bookDto.getPublishedDate())
.param("language", bookDto.getLanguage())
.param("genre", bookDto.getGenre())
.param("email", "hell")
)
.andExpect(status().isOk());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
为了让 .when() 看到匹配和 return 对象模拟对象,我想使用 any(Object.class) 但它似乎在 Jupiter5 中不起作用它在 JUnit4
中的工作方式相同我想做如下的事情
Mockito.when(bookUploadService.uploadBook(any(BookDto.class), any(MultipartFile.class)))
.thenReturn(Optional.of(bookDto));
但是,它要求我将 any() 转换为该方法请求的参数。当我执行并执行时,它抛出一个转换异常。
任何人都可以帮助并告诉我我做错了什么或我错过了什么吗? 或者,如果您明白为什么我的 .when() 没有看到匹配项,我们将不胜感激。
这是我试图模拟的方法
public Optional<BookDto> uploadBook(BookDto bookDto, MultipartFile bookFile)
谢谢
any(Class<T> type)
是一个简单的 mockito 功能。
在编译时和运行时,它不能被 JUnit 破坏。
因此,使用 JUnit4 或 JUnit 5 不应更改 any()
行为,同时为您的测试 class 正确设置 Spring 单元测试配置,这是 JUnit 4 中兼容的 Spring Runner和 JUnit 5 中兼容的 Spring 扩展。
此外,您的原始代码是有效的,而使用 any()
进行模拟会在您的单元测试中设置一些弱点。
关于您当前的问题,我敢打赌您在某处使用了错误的导入,可能是 any()
。它应该是静态的 org.mockito.ArgumentMatchers.any
;