2017-05-17 1 views
1

J'essaie de créer un projet en utilisant Rest Assured avec TestNG, mais je rencontre un problème avec java.lang.NoClassDefFoundError: org/hamcrest/TypeSafeMatcher. Plutôt nouveau à cela, toute aide est appréciée.Classe non trouvée org/hamcrest/TypeSafeMatcher

J'utilise Maven:

<dependencies> 
     <dependency> 
      <groupId>io.rest-assured</groupId> 
      <artifactId>rest-assured</artifactId> 
      <version>3.0.3</version> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>io.rest-assured</groupId> 
      <artifactId>json-schema-validator</artifactId> 
      <version>3.0.3</version> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.testng</groupId> 
      <artifactId>testng</artifactId> 
      <version>6.8</version> 
      <scope>test</scope> 
     </dependency> 
    </dependencies> 

La trace de la pile:

java.lang.NoClassDefFoundError: org/hamcrest/TypeSafeMatcher 

    at java.lang.ClassLoader.defineClass1(Native Method) 
    at java.lang.ClassLoader.defineClass(ClassLoader.java:763) 
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) 
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:467) 
    at java.net.URLClassLoader.access$100(URLClassLoader.java:73) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:368) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:362) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:361) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
    at Tests.GameTests.GameTest.testGameSchema(GameTest.java:24) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80) 
    at org.testng.internal.Invoker.invokeMethod(Invoker.java:714) 
    at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:901) 
    at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1231) 
    at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127) 
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111) 
    at org.testng.TestRunner.privateRun(TestRunner.java:767) 
    at org.testng.TestRunner.run(TestRunner.java:617) 
    at org.testng.SuiteRunner.runTest(SuiteRunner.java:334) 
    at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:329) 
    at org.testng.SuiteRunner.privateRun(SuiteRunner.java:291) 
    at org.testng.SuiteRunner.run(SuiteRunner.java:240) 
    at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52) 
    at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86) 
    at org.testng.TestNG.runSuitesSequentially(TestNG.java:1198) 
    at org.testng.TestNG.runSuitesLocally(TestNG.java:1123) 
    at org.testng.TestNG.run(TestNG.java:1031) 
    at org.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:72) 
    at org.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:127) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147) 
Caused by: java.lang.ClassNotFoundException: org.hamcrest.TypeSafeMatcher 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
    ... 41 more 

Maven Dependencies

package Tests.GameTests; 

import Tests.TestModel; 
import com.github.fge.jsonschema.cfg.ValidationConfiguration; 
import com.github.fge.jsonschema.main.JsonSchemaFactory; 
import org.testng.annotations.Test; 

import static com.github.fge.jsonschema.SchemaVersion.DRAFTV4; 
import static io.restassured.RestAssured.when; 
import static io.restassured.module.jsv.JsonSchemaValidator.matchesJsonSchemaInClasspath; 

public class GameTest extends TestModel { 

    @Test 
    public void testGameSchema() { 
     JsonSchemaFactory jsonSchemaFactory = JsonSchemaFactory.newBuilder(). 
      setValidationConfiguration(ValidationConfiguration. 
      newBuilder(). 
      setDefaultVersion(DRAFTV4).freeze()).freeze(); 

     when(). 
      get("/games/114"). 
      then(). 
      assertThat(). 
      body(matchesJsonSchemaInClasspath("game_schema.json"). 
        using(jsonSchemaFactory)); 
    } 
} 
+0

pouvez-vous publier votre 'testng' fichier aussi, je pense qu'il est mauvais, vous devez donner le nom de la classe comme 'org.hamcrest.TypeSafeMatcher' au lieu de' org/hamcrest/TypeSafeMatcher' –

+0

@SaradaAkurathi a mis à jour le post avec le fichier de test complet en bas –

Répondre

2

Vous pouvez ajouter explicitement hamcrest dépendance dans votre pom. J'ai rencontré plusieurs fois des problèmes similaires avec hamcrest, et l'ajouter explicitement m'a toujours aidé.

+0

fantastique. Branché dans la dépendance explicitement dans et maintenant le test s'exécute. Je dois nettoyer la méthode de test maintenant. –

0

J'ai eu exactement la même erreur sauf que j'utilise JUnit au lieu de TestNG. Cela n'aide pas l'affiche originale mais je me suis dit qu'il y en avait d'autres comme moi.

La réponse acceptée ne fonctionnait pas pour moi, mais je trouve que mettre la dépendance Assurés avant le repos JUnit dans mon POM a résolu le problème (je l'avais Rassurez-vous après JUnit):

<dependencies> 
    <!-- Other dependencies... --> 
    <!-- Add dependency for Rest Assured (has to go before JUnit to work) --> 
    <dependency> 
     <groupId>io.rest-assured</groupId> 
     <artifactId>rest-assured</artifactId> 
     <version>3.0.6</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>4.10</version> 
     <scope>test</scope> 
    </dependency> 
    <!-- Other dependencies... --> 
</dependencies> 

Source: https://github.com/rest-assured/rest-assured/wiki/GettingStarted#maven--gradle-users

Remarques

  1. Vous devez placer l'assurance repos avant les Depe JUnit Déclaration de l'identité dans votre fichier pom.xml/build.gradle afin de vous assurer que la bonne version de Hamcrest est utilisée.
  2. Rassurez-vous et comprend JsonPath XMLPosition comme dépendances transitif

(l'accent est à moi)