问题描述
我想为我的 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
部分。