如何在 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;