当我什至不使用参数化测试时,为什么会出现 ParameterResolutionException?

问题描述

我想为我的 BookService 编写一个测试。这就是那个测试。我不知道为什么我总是收到以下错误

/index.html

如您所见,我在这里不使用参数化测试。提前致谢!

org.junit.jupiter.api.extension.ParameterResolutionException: No ParameterResolver registered for parameter 
[com.mrfisherman.library.service.domain.BookService bookService] in constructor 
[public com.mrfisherman.library.service.domain.BookServiceTest(com.mrfisherman.library.service.domain.BookService,com.mrfisherman.library.persistence.repository.BookRepository)].

解决方法

参数化的。测试框架应该如何创建 BookServiceTest 类的新实例?

通常,测试类有一个无参数构造函数(此时,框架可以只创建一个新实例而无需任何其他信息,例如“如何获取 bookService 的实例以传递给此构造函数?” ).

,

在 JUnit Jupiter 中,每当测试类构造函数、生命周期方法(例如 ParameterResolutionException)或测试方法声明无法由注册的 {{ 1}} 个扩展。

因此,即使您没有使用 @BeforeEach 方法,也可能会抛出 ParameterResolver

使用 ParameterResolutionException 时,会自动为您注册 @ParameterizedTest@SpringBootTest 实现了 JUnit Jupiter 的 SpringExtension 扩展 API,以便您可以将 SpringExtension 中的 bean 注入到测试类中的构造函数和方法中。

解决问题的最简单方法是使用 ParameterResolver 注释 ApplicationContext 构造函数。

有关更多信息和替代方法,请查看 Spring 参考文档的 Dependency Injection with SpringExtension 部分。