Junit 5 - 没有为参数注册 ParameterResolver
Junit 5 - No ParameterResolver registered for parameter
我可以在没有任何特殊测试框架的情况下编写和执行 Selenium 脚本,但我想使用 Junit 5(因为我们依赖于其他工具)并且我在使用 Junit 时从未见过这样的错误 org.junit.jupiter.api.extension.ParameterResolutionException
4.
目前是 Junit 5 和
我在谷歌上搜索了一些想法,但无法解决问题。
使用 JUnit 5
、Eclipse 4.8
和 Selenium
测试脚本:
import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
public class loginTest {
public WebDriver driver = null;
public loginTest(WebDriver driver) {
this.driver=driver;
}
@BeforeEach
public void setUp() throws Exception {
driver.get("google.com");
System.out.println("Page title is: " + driver.getTitle());
}
@Test
public void test() {
// some action here I have in original script
System.out.println("Page title is: " + driver.getTitle());
}
@AfterEach
public void tearDown() throws Exception {
driver.quit();
}
}
堆栈跟踪:
org.junit.jupiter.api.extension.ParameterResolutionException: No ParameterResolver registered for parameter [org.openqa.selenium.WebDriver arg0] in executable [public login.loginTest(org.openqa.selenium.WebDriver)].
at org.junit.jupiter.engine.execution.ExecutableInvoker.resolveParameter(ExecutableInvoker.java:191)
正如 Marc Philipp 在他的评论中提到的,您需要确保 JUnit Jupiter 可以实例化您的测试 class。
对于您的特定情况,您需要删除接受 WebDriver
.
的自定义构造函数
那么你有两个选择:
- 自行创建
WebDriver
-- 例如,在 @BeforeAll
或 @BeforeEach
方法中。
- 使用 Selenium Jupiter 等扩展程序来帮助您管理
WebDriver
。
我还得到了 ParameterResolutionException
和 JUnit 5。
org.junit.jupiter.api.extension.ParameterResolutionException:
No ParameterResolver registered for parameter [int[] arg0] in constructor (public my_package.MyClass(int[]))
我在测试的 class 中编写了 @Test
方法。
可以通过两种方式修复此错误:
1) 将 import org.junit.jupiter.api.Test
替换为 import org.junit.Test
,或者
2) 在单独的 TestClass 中编写测试。
我让 @Test
和 @ParameterizedTest
注释相同的方法。我删除了前者。
当您尝试在同一测试 class 中同时使用 @Test
和 @ParameterizedTest
时会出现此错误。删除 @Test
注释将解决问题。
我得到这个错误是因为我的测试需要我的 Spring 启动服务器首先是 运行,这样使用 @Autowired 的依赖注入就会被执行。我添加了这些注释:
@Transactional
@ExtendWith(SpringExtension.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes = Server.class)
public MyTestClass () {
...
}
使用 @ExtendWith(MockitoExtension.class) 注释测试 class 对我有用
对我来说,我正在使用
@ParameterizedTest
@CsvSource({
"1st-param1","1st-param2",
"2nd-param1","2nd-param2"
})
public void isCompleted(String param1, String param2) {
而不是(引号错误):
@ParameterizedTest
@CsvSource({
"1st-param1,1st-param2",
"2nd-param1,2nd-param2"
})
public void isCompleted(String param1, String param2) {
在我的情况下,我有 2 个参数。第一个参数使用了@AggregateWith,第二个参数不应该聚合并且已经是正确的类型,但 JUnit 也尝试聚合它。
切换参数0和1解决了我的问题(即@AggregateWith注释的参数现在在最后)。
我有类似的问题,我通过删除 @Test
注释解决了它
并引入注解 @ParameterizedTest
我在同时使用 junit4 和 junit5 时遇到了与我的依赖项类似的问题。我制作了 @Tests
用于 junit4,即 import org.junit.Test
。这解决了问题。
我认为你项目中的 WebDriver class 没有被注释为一个 bean 并且它不能被注入,我遇到了同样的问题,当我将注入方式从构造函数注入更改为实例变量注入时,它throws NoSuchBeanDefinitionException ("No qualifying bean of type '...service.RsRepositoryService' available: "),它没有找到我们试图注入的 bean。
希望这可以帮助解决这个问题的人:)
我可以在没有任何特殊测试框架的情况下编写和执行 Selenium 脚本,但我想使用 Junit 5(因为我们依赖于其他工具)并且我在使用 Junit 时从未见过这样的错误 org.junit.jupiter.api.extension.ParameterResolutionException
4.
目前是 Junit 5 和 我在谷歌上搜索了一些想法,但无法解决问题。
使用 JUnit 5
、Eclipse 4.8
和 Selenium
测试脚本:
import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
public class loginTest {
public WebDriver driver = null;
public loginTest(WebDriver driver) {
this.driver=driver;
}
@BeforeEach
public void setUp() throws Exception {
driver.get("google.com");
System.out.println("Page title is: " + driver.getTitle());
}
@Test
public void test() {
// some action here I have in original script
System.out.println("Page title is: " + driver.getTitle());
}
@AfterEach
public void tearDown() throws Exception {
driver.quit();
}
}
堆栈跟踪:
org.junit.jupiter.api.extension.ParameterResolutionException: No ParameterResolver registered for parameter [org.openqa.selenium.WebDriver arg0] in executable [public login.loginTest(org.openqa.selenium.WebDriver)]. at org.junit.jupiter.engine.execution.ExecutableInvoker.resolveParameter(ExecutableInvoker.java:191)
正如 Marc Philipp 在他的评论中提到的,您需要确保 JUnit Jupiter 可以实例化您的测试 class。
对于您的特定情况,您需要删除接受 WebDriver
.
那么你有两个选择:
- 自行创建
WebDriver
-- 例如,在@BeforeAll
或@BeforeEach
方法中。 - 使用 Selenium Jupiter 等扩展程序来帮助您管理
WebDriver
。
我还得到了 ParameterResolutionException
和 JUnit 5。
org.junit.jupiter.api.extension.ParameterResolutionException:
No ParameterResolver registered for parameter [int[] arg0] in constructor (public my_package.MyClass(int[]))
我在测试的 class 中编写了 @Test
方法。
可以通过两种方式修复此错误:
1) 将 import org.junit.jupiter.api.Test
替换为 import org.junit.Test
,或者
2) 在单独的 TestClass 中编写测试。
我让 @Test
和 @ParameterizedTest
注释相同的方法。我删除了前者。
当您尝试在同一测试 class 中同时使用 @Test
和 @ParameterizedTest
时会出现此错误。删除 @Test
注释将解决问题。
我得到这个错误是因为我的测试需要我的 Spring 启动服务器首先是 运行,这样使用 @Autowired 的依赖注入就会被执行。我添加了这些注释:
@Transactional
@ExtendWith(SpringExtension.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes = Server.class)
public MyTestClass () {
...
}
使用 @ExtendWith(MockitoExtension.class) 注释测试 class 对我有用
对我来说,我正在使用
@ParameterizedTest
@CsvSource({
"1st-param1","1st-param2",
"2nd-param1","2nd-param2"
})
public void isCompleted(String param1, String param2) {
而不是(引号错误):
@ParameterizedTest
@CsvSource({
"1st-param1,1st-param2",
"2nd-param1,2nd-param2"
})
public void isCompleted(String param1, String param2) {
在我的情况下,我有 2 个参数。第一个参数使用了@AggregateWith,第二个参数不应该聚合并且已经是正确的类型,但 JUnit 也尝试聚合它。
切换参数0和1解决了我的问题(即@AggregateWith注释的参数现在在最后)。
我有类似的问题,我通过删除 @Test
注释解决了它
并引入注解 @ParameterizedTest
我在同时使用 junit4 和 junit5 时遇到了与我的依赖项类似的问题。我制作了 @Tests
用于 junit4,即 import org.junit.Test
。这解决了问题。
我认为你项目中的 WebDriver class 没有被注释为一个 bean 并且它不能被注入,我遇到了同样的问题,当我将注入方式从构造函数注入更改为实例变量注入时,它throws NoSuchBeanDefinitionException ("No qualifying bean of type '...service.RsRepositoryService' available: "),它没有找到我们试图注入的 bean。 希望这可以帮助解决这个问题的人:)