spring-restdocs 2.0.2.RELEASE 的 Nullpointer(有 Restassured)
Nullpointer with spring-restdocs 2.0.2.RELEASE (with Restassured)
我使用 spring-restdocs 和 spring-restdocs-restassured (2.0.2.RELEASE),来自 spring-boot-dependencies (2.0.4.RELEASE).
我使用的代码如下:
@BeforeAll
static void setup(RestDocumentationContextProvider restDocumentation) throws IOException {
spec = new RequestSpecBuilder()
.addFilter(
documentationConfiguration(restDocumentation)
.operationPreprocessors()
.withRequestDefaults(prettyPrint())
.withResponseDefaults(prettyPrint()))
.build();
descriptor = new FieldDescriptor[] {
fieldWithPath("prop1").description("Is property 1"),
fieldWithPath("prop2").description("Is property 2"),
fieldWithPath("prop3").description("Is property 3"),
fieldWithPath("prop4").description("Is property 4"),
fieldWithPath("prop5").description("Is property 5")};
}
@Test
void should_not_be_nullpointer(){
given(spec)
.filter(document("demo",
responseFields().andWithPrefix("[].", descriptor)
))
.port(port)
.basePath("v1")
.when()
.get("/demo")
.then()
.contentType(JSON)
.statusCode(200);
}
我收到以下错误:
java.lang.NullPointerException
at org.springframework.restdocs.ManualRestDocumentation.beforeOperation(ManualRestDocumentation.java:89)
at org.springframework.restdocs.RestDocumentationExtension.lambda$resolveParameter[=13=](RestDocumentationExtension.java:58)
at org.springframework.restdocs.restassured3.RestAssuredRestDocumentationConfigurer.filter(RestAssuredRestDocumentationConfigurer.java:69)
at org.springframework.restdocs.restassured3.RestAssuredOperationPreprocessorsConfigurer.filter(RestAssuredOperationPreprocessorsConfigurer.java:46)
at io.restassured.filter.Filter$filter.call(Unknown Source)
将 spring-restdocs 依赖项设置为 2.0 版时。1.RELEASE,它按预期工作。
这似乎是一个错误(我打开了一个问题here),但如果有人对此有更深入的了解,那将是非常欢迎的。
Spring REST Docs 中的上下文是方法范围的,但您对 @BeforeAll
的使用使其成为 class 范围的。由于 RestDocumentationExtension
是有状态的,您之前没有遇到这种错误配置。 JUnit Jupiter 扩展应该是无状态的,所以 RestDocumentationExtension
有状态是一个错误。它已在 REST Docs 2.0.2 中修复,这就是错误配置现在导致问题的原因。
您可以通过将 @BeforeAll
替换为 @BeforeEach
(并从 setup
方法中删除 static
)来解决此问题。有关使用 JUnit 5 时正确设置的更多详细信息,请参阅 REST 文档 reference documentation。
我使用 spring-restdocs 和 spring-restdocs-restassured (2.0.2.RELEASE),来自 spring-boot-dependencies (2.0.4.RELEASE).
我使用的代码如下:
@BeforeAll
static void setup(RestDocumentationContextProvider restDocumentation) throws IOException {
spec = new RequestSpecBuilder()
.addFilter(
documentationConfiguration(restDocumentation)
.operationPreprocessors()
.withRequestDefaults(prettyPrint())
.withResponseDefaults(prettyPrint()))
.build();
descriptor = new FieldDescriptor[] {
fieldWithPath("prop1").description("Is property 1"),
fieldWithPath("prop2").description("Is property 2"),
fieldWithPath("prop3").description("Is property 3"),
fieldWithPath("prop4").description("Is property 4"),
fieldWithPath("prop5").description("Is property 5")};
}
@Test
void should_not_be_nullpointer(){
given(spec)
.filter(document("demo",
responseFields().andWithPrefix("[].", descriptor)
))
.port(port)
.basePath("v1")
.when()
.get("/demo")
.then()
.contentType(JSON)
.statusCode(200);
}
我收到以下错误:
java.lang.NullPointerException
at org.springframework.restdocs.ManualRestDocumentation.beforeOperation(ManualRestDocumentation.java:89)
at org.springframework.restdocs.RestDocumentationExtension.lambda$resolveParameter[=13=](RestDocumentationExtension.java:58)
at org.springframework.restdocs.restassured3.RestAssuredRestDocumentationConfigurer.filter(RestAssuredRestDocumentationConfigurer.java:69)
at org.springframework.restdocs.restassured3.RestAssuredOperationPreprocessorsConfigurer.filter(RestAssuredOperationPreprocessorsConfigurer.java:46)
at io.restassured.filter.Filter$filter.call(Unknown Source)
将 spring-restdocs 依赖项设置为 2.0 版时。1.RELEASE,它按预期工作。
这似乎是一个错误(我打开了一个问题here),但如果有人对此有更深入的了解,那将是非常欢迎的。
Spring REST Docs 中的上下文是方法范围的,但您对 @BeforeAll
的使用使其成为 class 范围的。由于 RestDocumentationExtension
是有状态的,您之前没有遇到这种错误配置。 JUnit Jupiter 扩展应该是无状态的,所以 RestDocumentationExtension
有状态是一个错误。它已在 REST Docs 2.0.2 中修复,这就是错误配置现在导致问题的原因。
您可以通过将 @BeforeAll
替换为 @BeforeEach
(并从 setup
方法中删除 static
)来解决此问题。有关使用 JUnit 5 时正确设置的更多详细信息,请参阅 REST 文档 reference documentation。