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)
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:
WebDriver
par vous-même - par exemple, dans un @BeforeAll
ou @BeforeEach
méthode.WebDriver
pour vous.J'avais les deux @Test
et @ParameterizedTest
annoter la même méthode. J'ai supprimé l'ancien.
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.
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.
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 () {
...
}