RobWin / assertj-swagger

A Swagger assertj test library which compares a contract-first Swagger YAML/JSON file with a code-first Swagger JSON
Apache License 2.0
171 stars 44 forks source link

Incompatibility with new springfox-swagger2 v2.7.0 #19

Closed naXa777 closed 5 years ago

naXa777 commented 7 years ago

Exception stacktrace:

reading from C:/Users/user/projects/Demo/target/classes/api/swagger.yaml

java.lang.NoSuchMethodError: io.swagger.models.parameters.AbstractSerializableParameter.setMaximum(Ljava/lang/Double;)V

|tat io.swagger.parser.util.SwaggerDeserializer.parameter(SwaggerDeserializer.java:468)
|tat io.swagger.parser.util.SwaggerDeserializer.parameters(SwaggerDeserializer.java:400)
|tat io.swagger.parser.util.SwaggerDeserializer.operation(SwaggerDeserializer.java:319)
|tat io.swagger.parser.util.SwaggerDeserializer.path(SwaggerDeserializer.java:204)
|tat io.swagger.parser.util.SwaggerDeserializer.paths(SwaggerDeserializer.java:170)
|tat io.swagger.parser.util.SwaggerDeserializer.parseRoot(SwaggerDeserializer.java:105)
|tat io.swagger.parser.util.SwaggerDeserializer.deserialize(SwaggerDeserializer.java:35)
|tat io.swagger.parser.Swagger20Parser.convertToSwagger(Swagger20Parser.java:128)
|tat io.swagger.parser.Swagger20Parser.read(Swagger20Parser.java:98)
|tat io.swagger.parser.SwaggerParser.read(SwaggerParser.java:64)
|tat io.swagger.parser.SwaggerParser.read(SwaggerParser.java:52)
|tat io.github.robwin.swagger.test.SwaggerAssert.satisfiesContract(SwaggerAssert.java:109)
|tat com.scnsoft.eldermark.AssertJSwaggerConsumerDrivenTest.validateThatImplementationSatisfiesConsumerSpecification(AssertJSwaggerConsumerDrivenTest.java:32)
|tat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
|tat sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
|tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
|tat java.lang.reflect.Method.invoke(Method.java:606)
|tat org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
|tat org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
|tat org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
|tat org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
|tat org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:75)
|tat org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:86)
|tat org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:84)
|tat org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
|tat org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:252)
|tat org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:94)
|tat org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
|tat org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
|tat org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
|tat org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
|tat org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
|tat org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
|tat org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
|tat org.junit.runners.ParentRunner.run(ParentRunner.java:363)
|tat org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:191)
|tat org.junit.runner.JUnitCore.run(JUnitCore.java:137)
|tat com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
|tat com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
|tat com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
|tat com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)

Test code:


@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class AssertJSwaggerConsumerDrivenTest {

    @LocalServerPort
    int randomPort;

    @Test
    public void validateThatImplementationSatisfiesConsumerSpecification() {
        File designFirstSwagger = new File(AssertJSwaggerConsumerDrivenTest.class.getResource("/api/swagger.yaml").getFile());
        SwaggerAssertions.assertThat("http://localhost:" + randomPort + "/v2/api-docs")
                .satisfiesContract(designFirstSwagger.getAbsolutePath());
    }

}

Dependencies:

<dependency>
    <groupId>io.github.robwin</groupId>
    <artifactId>assertj-swagger</artifactId>
    <version>0.5.0</version>
    <scope>test</scope>
</dependency>

<dependency>
    <groupId>org.assertj</groupId>
    <artifactId>assertj-core</artifactId>
    <version>2.0.0</version>
    <scope>test</scope>
</dependency>
RobWin commented 7 years ago

Released 0.6.0

naXa777 commented 7 years ago

I've updated to the latest version (assertj-core : 3.8.0, assertj-swagger : 0.6.0) and noticed that :

  1. Java 1.7 support is dropped, so I have to switch to Java 1.8
java.lang.UnsupportedClassVersionError: io/github/robwin/swagger/test/SwaggerAssertions : Unsupported major.minor version 52.0
  1. I still get this error
reading from C:/Users/user/projects/Demo/target/classes/api/swagger.yaml

java.lang.NoSuchMethodError: io.swagger.models.parameters.AbstractSerializableParameter.setMaximum(Ljava/lang/Double;)V
        at io.swagger.parser.util.SwaggerDeserializer.parameter(SwaggerDeserializer.java:468)
        at io.swagger.parser.util.SwaggerDeserializer.parameters(SwaggerDeserializer.java:400)
        at io.swagger.parser.util.SwaggerDeserializer.operation(SwaggerDeserializer.java:319)
        at io.swagger.parser.util.SwaggerDeserializer.path(SwaggerDeserializer.java:204)
        at io.swagger.parser.util.SwaggerDeserializer.paths(SwaggerDeserializer.java:170)
        at io.swagger.parser.util.SwaggerDeserializer.parseRoot(SwaggerDeserializer.java:105)
        at io.swagger.parser.util.SwaggerDeserializer.deserialize(SwaggerDeserializer.java:35)
        at io.swagger.parser.Swagger20Parser.convertToSwagger(Swagger20Parser.java:128)
        at io.swagger.parser.Swagger20Parser.read(Swagger20Parser.java:98)
        at io.swagger.parser.SwaggerParser.read(SwaggerParser.java:64)
        at io.swagger.parser.SwaggerParser.read(SwaggerParser.java:52)
        at io.github.robwin.swagger.test.SwaggerAssert.satisfiesContract(SwaggerAssert.java:109)
        at com.scnsoft.eldermark.AssertJSwaggerConsumerDrivenTest.validateThatImplementationSatisfiesConsumerSpecification(AssertJSwaggerConsumerDrivenTest.java:31)

Please, reopen.

naXa777 commented 7 years ago

The issue is resolved by adding dependency on the latest version of swagger-parser

<dependency>
    <groupId>io.swagger</groupId>
    <artifactId>swagger-parser</artifactId>
    <version>1.0.30</version>
    <scope>test</scope>
</dependency>

Background: AbstractSerializableParameter.setMaximum(Ljava/lang/Double;) was replaced by AbstractSerializableParameter.setMaximum(Ljava/math/BigDecimal;) in swagger-models 1.5.13.

atsu85 commented 6 years ago

@naXa777, did i understand correctly based on your last comment, that this issue should be closed? Perhaps @RobWin reopened without reading the last comment? Or perhaps i'm missing smth.

marcelstoer commented 5 years ago

This library and a recents Springfox versions work just fine in tandem -> this should IMO be closed.