Java Junit 5-没有为参数注册ParameterResolver

Java Junit 5-没有为参数注册ParameterResolver,java,selenium-webdriver,junit5,Java,Selenium Webdriver,Junit5,来源:JUnit5、Eclipse4.8、Selenium 我可以在没有任何特殊测试框架的情况下编写和执行Selenium脚本,但我想使用Junit 5(因为我们与其他工具有依赖关系),我从未见过这样的错误“org.Junit.jupiter.api.extension.ParameterResolutionException” 在使用JUnit4时。目前是JUnit5和 我在谷歌上搜索了一下,想了解一些情况,但无法解决这个问题 测试脚本: package login; import stati

来源:JUnit5、Eclipse4.8、Selenium

我可以在没有任何特殊测试框架的情况下编写和执行Selenium脚本,但我想使用Junit 5(因为我们与其他工具有依赖关系),我从未见过这样的错误“org.Junit.jupiter.api.extension.ParameterResolutionException” 在使用JUnit4时。目前是JUnit5和 我在谷歌上搜索了一下,想了解一些情况,但无法解决这个问题

测试脚本:

package login;
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)
    at org.junit.jupiter.engine.execution.ExecutableInvoker.resolveParameters(ExecutableInvoker.java:174)
    at org.junit.jupiter.engine.execution.ExecutableInvoker.resolveParameters(ExecutableInvoker.java:135)
    at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:61)
    at org.junit.jupiter.engine.descriptor.ClassTestDescriptor.instantiateTestClass(ClassTestDescriptor.java:208)
    at org.junit.jupiter.engine.descriptor.ClassTestDescriptor.instantiateAndPostProcessTestInstance(ClassTestDescriptor.java:195)
    at org.junit.jupiter.engine.descriptor.ClassTestDescriptor.lambda$testInstanceProvider$0(ClassTestDescriptor.java:185)
    at org.junit.jupiter.engine.descriptor.ClassTestDescriptor.lambda$testInstanceProvider$1(ClassTestDescriptor.java:189)
    at java.util.Optional.orElseGet(Unknown Source)
    at org.junit.jupiter.engine.descriptor.ClassTestDescriptor.lambda$testInstanceProvider$2(ClassTestDescriptor.java:188)
    at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:81)
    at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:58)
    at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor$NodeExecutor.prepare(HierarchicalTestExecutor.java:89)
    at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor$NodeExecutor.execute(HierarchicalTestExecutor.java:74)
    at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor$NodeExecutor.lambda$executeRecursively$2(HierarchicalTestExecutor.java:120)
    at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source)
    at java.util.stream.ReferencePipeline$2$1.accept(Unknown Source)
    at java.util.Iterator.forEachRemaining(Unknown Source)
    at java.util.Spliterators$IteratorSpliterator.forEachRemaining(Unknown Source)
    at java.util.stream.AbstractPipeline.copyInto(Unknown Source)
    at java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
    at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(Unknown Source)
    at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(Unknown Source)
    at java.util.stream.AbstractPipeline.evaluate(Unknown Source)
    at java.util.stream.ReferencePipeline.forEach(Unknown Source)
    at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor$NodeExecutor.lambda$executeRecursively$3(HierarchicalTestExecutor.java:120)
    at org.junit.platform.engine.support.hierarchical.SingleTestExecutor.executeSafely(SingleTestExecutor.java:66)
    at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor$NodeExecutor.executeRecursively(HierarchicalTestExecutor.java:108)
    at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor$NodeExecutor.execute(HierarchicalTestExecutor.java:79)
    at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor$NodeExecutor.lambda$executeRecursively$2(HierarchicalTestExecutor.java:120)
    at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source)
    at java.util.stream.ReferencePipeline$2$1.accept(Unknown Source)
    at java.util.Iterator.forEachRemaining(Unknown Source)
    at java.util.Spliterators$IteratorSpliterator.forEachRemaining(Unknown Source)
    at java.util.stream.AbstractPipeline.copyInto(Unknown Source)
    at java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
    at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(Unknown Source)
    at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(Unknown Source)
    at java.util.stream.AbstractPipeline.evaluate(Unknown Source)
    at java.util.stream.ReferencePipeline.forEach(Unknown Source)
    at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor$NodeExecutor.lambda$executeRecursively$3(HierarchicalTestExecutor.java:120)
    at org.junit.platform.engine.support.hierarchical.SingleTestExecutor.executeSafely(SingleTestExecutor.java:66)
    at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor$NodeExecutor.executeRecursively(HierarchicalTestExecutor.java:108)
    at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor$NodeExecutor.execute(HierarchicalTestExecutor.java:79)
    at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:55)
    at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:43)
    at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:170)
    at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:154)
    at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:90)
    at org.eclipse.jdt.internal.junit5.runner.JUnit5TestReference.run(JUnit5TestReference.java:86)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:538)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:760)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:460)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:206)

正如Marc Philipp在评论中提到的,您需要确保JUnit Jupiter能够实例化您的测试类

对于您的特定场景,您需要删除接受
WebDriver
的自定义构造函数

那么您有两个选择:

  • 自己创建
    WebDriver
    ——例如,在
    @BeforeAll
    @beforeach
    方法中
  • 使用扩展名(如)帮助您管理
    WebDriver

  • 我还使用JUnit5获得了
    ParameterResolutionException

    org.junit.jupiter.api.extension.ParameterResolutionException: 
    No ParameterResolver registered for parameter [int[] arg0] in constructor (public my_package.MyClass(int[]))
    

    我在测试的类中编写了
    @Test
    方法

    此错误可以通过两种方式修复:

    1) 将导入org.junit.jupiter.api.Test替换为导入org.junit.Test,或者


    2) 在一个单独的测试类中编写测试。

    我让
    @Test
    @parameteredTest
    都注释了相同的方法。我删除了前者。

    当您尝试在同一测试类中同时使用
    @Test
    @parameteredTest
    时,会出现此错误。删除
    @Test
    注释将解决此问题。

    我出现此错误是因为我的测试需要首先运行Spring引导服务器,以便使用@Autowired执行依赖项注入。我添加了以下注释:

    @Transactional
    @ExtendWith(SpringExtension.class)
    @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes = Server.class)
    public MyTestClass () {
    ...
    
    }
    

    用@extendedwith(MockitoExtension.class)注释测试类对我来说很有用

    @ParameterizedTest
    @CsvSource({
            "1st-param1","1st-param2",
            "2nd-param1","2nd-param2"
            })
    public void isCompleted(String param1, String param2) {
    
    而不是(引用错误):


    在我的情况下,我有两个参数。第一个参数使用@AggregateWith,第二个参数不应该被聚合,并且已经是正确的类型,但是JUnit也尝试聚合它


    切换参数0和1为我解决了这个问题(即用@AggregateWith注释的参数现在位于末尾)。

    JUnit需要使用其构造函数实例化测试类,该构造函数具有
    WebDriver
    参数。因此,它寻找一个已注册的
    参数Resolver
    来解析它,但没有注册。您有提供
    WebDriver
    实例的扩展吗?没有,我没有。我该怎么做?这解决了我的问题-好问题!
    @ParameterizedTest
    @CsvSource({
            "1st-param1,1st-param2",
            "2nd-param1,2nd-param2"
            })
    public void isCompleted(String param1, String param2) {