Junit 5 - 没有为参数注册 ParameterResolver

Junit 5 - No ParameterResolver registered for parameter

我可以在没有任何特殊测试框架的情况下编写和执行 Selenium 脚本,但我想使用 Junit 5(因为我们依赖于其他工具)并且我在使用 Junit 时从未见过这样的错误 org.junit.jupiter.api.extension.ParameterResolutionException 4.

目前是 Junit 5 和 我在谷歌上搜索了一些想法,但无法解决问题。

使用 JUnit 5Eclipse 4.8Selenium 测试脚本:

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.

的自定义构造函数

那么你有两个选择:

  1. 自行创建 WebDriver -- 例如,在 @BeforeAll@BeforeEach 方法中。
  2. 使用 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。 希望这可以帮助解决这个问题的人:)