java.lang.NoClassDefFoundError:io / restassured / mapper / factory / GsonObjectMapperFactory

use*_*045 6 rest-assured

当我尝试使用放心的框架执行脚本时出现错误。请指导我解决相同的问题。我用下面的罐子

Java版本-8 rest-assured-2.8.0 json-path-2.8.0 hamcrest-all-1.3 commons-lang3-3.0 json-schema-validator-2.2.0

失败:foo java.lang.NoClassDefFoundError:io / restassured / mapper / factory / GsonObjectMapperFactory at io.restassured.config.RestAssuredConfig。(RestAssuredConfig.java:41)at io.restassured.RestAssured。(RestAssured.java:420)在实践中.java的sun.reflect.NativeMethodAccessorImpl.invoke.getRequest.foo(GetRequest.java:12)in sun.reflect.DelegatingMethodAccessorImpl.invoke(未知方法)处sun.reflect.NativeMethodAccessorImpl.invoke(未知方法)java。 org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:108)位于org.testng.internal.Invoker.invokeMethod(Invoker.java:661)处的lang.reflect.Method.invoke(未知源)。内部的Internal.Invoker.invokeTestMethod(Invoker.java:869)。org上org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:126)的org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1193)org的org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:109)位于org.testng.SuiteRunner.runTest(SuiteRunner.java:380)的org.testng.TestRunner.run(TestRunner.java:602)的org.testng.SuiteRunner.runTest(SuiteRunner.java:380)的org.testng.SuiteRunner的.testng.TestRunner.privateRun(TestRunner.java:744)在org.testng.SuiteRunner.privateRun(SuiteRunner.java:340)在org.testng.SuiteRunner.run(SuiteRunner.java:289)在org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java)上运行(SuiteRunner.java:375) :52),位于org.testng.TestNG.runSuitesSequentially(TestNG.java:1301)at org.testng.TestNG.runSuitesLocal(TestNG.java:1226)at org.testng.TestNG.runSuites(TestNG.java:1144)at org.testng.TestNG.run(TestNG.java:1115)at org。在org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:230)处的testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:132)在org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:76)引起:java.lang.ClassNotFoundException:io.restassured.mapper.factory.GsonObjectMapperFactory在java.net.URLClassLoader.findClass(未知源)在java.lang.ClassLoader.loadClass(未知源)在sun.misc.Launcher $ AppClassLoader.loadClass java.lang.ClassLoader.loadClass中的(未知源)(未知源)...更多281226)at org.testng.TestNG.runSuites(TestNG.java:1144)at org.testng.TestNG.run(TestNG.java:1115)at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:132) org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:230)位于org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:76)由以下原因引起:java.lang.ClassNotFoundException:io.restassured.mapper.factory。 GsonObjectMapperFactory,位于java.net.URLClassLoader.findClass(未知源),位于java.lang.ClassLoader.loadClass(未知源),位于sun.misc.Launcher $ AppClassLoader.loadClass(未知源),位于java.lang.ClassLoader.loadClass(未知源) )...另外28个1226)at org.testng.TestNG.runSuites(TestNG.java:1144)at org.testng.TestNG.run(TestNG.java:1115)at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:132) org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:230)位于org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:76)由以下原因引起:java.lang.ClassNotFoundException:io.restassured.mapper.factory。 GsonObjectMapperFactory,位于java.net.URLClassLoader.findClass(未知源),位于java.lang.ClassLoader.loadClass(未知源),位于sun.misc.Launcher $ AppClassLoader.loadClass(未知源),位于java.lang.ClassLoader.loadClass(未知源) )...另外28个1115)在org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:132)在org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:230)在org.testng.remote.RemoteTestNG.main(RemoteTestNG.java :76)由以下原因引起:java.lang.ClassNotFoundException:io.restassured.mapper.factory.GsonObjectMapperFactory在java.net.URLClassLoader.findClass(未知源)在java.lang.ClassLoader.loadClass(未知源)在sun.misc。 java.lang.ClassLoader.loadClass(未知源)的Launcher $ AppClassLoader.loadClass(未知源)...更多281115)在org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:132)在org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:230)在org.testng.remote.RemoteTestNG.main(RemoteTestNG.java :76)由以下原因引起:java.lang.ClassNotFoundException:io.restassured.mapper.factory.GsonObjectMapperFactory在java.net.URLClassLoader.findClass(未知源)在java.lang.ClassLoader.loadClass(未知源)在sun.misc。 java.lang.ClassLoader.loadClass(未知源)的Launcher $ AppClassLoader.loadClass(未知源)...更多2876)由以下原因引起:java.lang.ClassNotFoundException:io.restassured.mapper.factory.GsonObjectMapperFactory在java.net.URLClassLoader.findClass(Unknown Source)在java.lang.ClassLoader.loadClass(Unknown Source)在sun.misc.Launcher java.lang.ClassLoader.loadClass的$ AppClassLoader.loadClass(未知源)... 28更多76)由以下原因引起:java.lang.ClassNotFoundException:io.restassured.mapper.factory.GsonObjectMapperFactory在java.net.URLClassLoader.findClass(Unknown Source)在java.lang.ClassLoader.loadClass(Unknown Source)在sun.misc.Launcher java.lang.ClassLoader.loadClass的$ AppClassLoader.loadClass(未知源)... 28更多

===============================================
    Default test
    Tests run: 1, Failures: 1, Skips: 0
===============================================


===============================================
Default suite
Total tests run: 1, Failures: 1, Skips: 0
===============================================
Run Code Online (Sandbox Code Playgroud)

Jim*_*dan 18

造成此问题的根本原因是可以放心使用的*ObjectMapperFactory软件包名称,例如在版本3.x和之间更改4.x

对于任何人碰到这个即将到来的后释放其余保证的4.0.0,这个问题可能会出现在春季启动项目-引起的版本不匹配rest-assured其传递dependencoes并json-pathxml-path春季启动依赖性BOM

如果指定依赖项io.rest-assured:rest-assured:4.0.0,则还需要显式包含io.rest-assured:json-path:4.0.0io.rest-assured:xml-path:4.0.0,否则spring-boot-dependencies将3.1.1使用旧的* ObjectMapperFactory包名称引入版本。


小智 10

对于遇到此问题的任何人,我发现此 git 页面也很有帮助:https : //github.com/rest-assured/rest-assured/issues/1168

我的 maven POM 最终工作的一个例子是:

            <dependency>
                <groupId>io.rest-assured</groupId>
                <artifactId>rest-assured</artifactId>
                <version>${io-rest-assured.version}</version>
                <scope>test</scope>
            </dependency>
            <!--Added required depeendencies due to : https://github.com/rest-assured/rest-assured/issues/1168 -->
            <dependency>
                <groupId>io.rest-assured</groupId>
                <artifactId>rest-assured-common</artifactId>
                <version>${io-rest-assured.version}</version>
            </dependency>
            <dependency>
                <groupId>io.rest-assured</groupId>
                <artifactId>json-path</artifactId>
                <version>${io-rest-assured.version}</version>
            </dependency>
            <dependency>
                <groupId>io.rest-assured</groupId>
                <artifactId>xml-path</artifactId>
                <version>${io-rest-assured.version}</version>
            </dependency>
Run Code Online (Sandbox Code Playgroud)

  • 这帮助我克服了 Gson 错误,然后遇到了 Groovy 类路径错误,并且还需要指定 org.codehaus.groovy:Groovy:3.0.2,因为 Spring Boot 测试依赖项引入了不兼容的版本 2.5。这就是我在放心的4.3.0中所经历的。 (2认同)

Ham*_*his 5

正如 Jim Riordan 所说,你必须明确包括io.rest-assured:json-path:4.0.0io.rest-assured:xml-path:4.0.0

我还需要在我的 Maven 依赖项中添加排除项io.rest-assured:spring-mock-mvc

<dependency>
    <groupId>io.rest-assured</groupId>
    <artifactId>spring-mock-mvc</artifactId>
    <version>4.0.0</version>
    <scope>test</scope>
    <exclusions>
        <exclusion>
            <artifactId>rest-assured</artifactId>
            <groupId>io.rest-assured</groupId>
        </exclusion>
    </exclusions>
</dependency>
Run Code Online (Sandbox Code Playgroud)


小智 0

在查看错误时,您需要显式地将 GSON 放入类路径或 POM 依赖项部分,因为它是 Rest Assured 的可选依赖项。

<!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.8.1</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)