web-dev-qa-db-fra.com

Junit 5 - Aucun paramètre ParameterResolver enregistré pour le paramètre

Source: JUnit 5, Eclipse 4.8, Sélénium

Je peux écrire et exécuter le script Selenium sans cadre de test spécial mais je voulais utiliser Junit 5 (car nous avons des dépendances avec d'autres outils) et je n'ai jamais vu une telle erreur "org.junit.jupiter.api.extension.ParameterResolutionException" pendant que travailler avec Junit 4. Actuellement, c'est Junit 5 et je l'ai recherché sur Google pour avoir une idée, mais je ne peux pas résoudre le problème.

Script de test:

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();
    }
}

Trace de la pile:

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)
14
Mike ASP

Comme Marc Philipp l'a mentionné dans son commentaire, vous devez vous assurer que JUnit Jupiter peut instancier votre classe de test.

Pour votre scénario particulier, vous devrez supprimer votre constructeur personnalisé qui accepte un WebDriver.

Ensuite, vous avez deux options:

  1. Créez le WebDriver par vous-même - par exemple, dans un @BeforeAll ou @BeforeEach méthode.
  2. Utilisez une extension telle que Selenium Jupiter pour aider à gérer le WebDriver pour vous.
2
Sam Brannen

J'avais les deux @Test et @ParameterizedTest annoter la même méthode. J'ai supprimé l'ancien.

10
Will

J'ai également obtenu ParameterResolutionException avec JUnit 5.

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

J'avais écrit @Test méthodes dans la classe que je testais.

Cette erreur peut être corrigée de deux manières:

1) Soit en remplaçant import org.junit.jupiter.api.Test avec import org.junit.Test, ou

2) Écriture de tests dans une classe de test séparée.

6
Matilda Smeds

Cette erreur apparaît lorsque vous essayez d'utiliser les deux @Test et @ParameterizedTest dans la même classe de test. Suppression de @Test l'annotation résoudra le problème.

0
muhin

J'ai eu cette erreur parce que mon test avait besoin que mon serveur Spring Boot soit exécuté en premier, afin que l'injection de dépendances à l'aide de @Autowired soit exécutée. J'ai ajouté ces annotations:

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

}
0
Janac Meena