2017-11-28 20 views
1

내 API를 테스트하기 위해 Spring Boot and Rest Docs + Rest Assured를 사용 중입니다. 여기 내 치어RestAssuredRestDocumentationConfigurer가 NullPointerException의 원인이 됨

<properties> 
     <spring-restdocs.version>1.2.2.RELEASE</spring-restdocs.version> 
</properties> 

     <dependency> 
      <groupId>org.springframework.restdocs</groupId> 
      <artifactId>spring-restdocs-core</artifactId> 
      <version>${spring-restdocs.version}</version> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework.restdocs</groupId> 
      <artifactId>spring-restdocs-restassured</artifactId> 
      <version>${spring-restdocs.version}</version> 
     </dependency> 

     <dependency> 
      <groupId>com.jayway.restassured</groupId> 
      <artifactId>rest-assured</artifactId> 
      <version>2.7.0</version> 
      <scope>test</scope> 
     </dependency> 

것은 여기 내 테스트

import com.jayway.restassured.RestAssured; 
import com.jayway.restassured.builder.RequestSpecBuilder; 
import com.jayway.restassured.specification.RequestSpecification; 
import org.junit.Before; 
import org.junit.Rule; 
import org.junit.Test; 
import org.junit.runner.RunWith; 
import org.springframework.boot.test.context.SpringBootTest; 
import org.springframework.http.MediaType; 
import org.springframework.restdocs.JUnitRestDocumentation; 
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; 

import java.util.HashMap; 
import java.util.Map; 

import static org.hamcrest.core.Is.is; 
import static org.springframework.restdocs.restassured.RestAssuredRestDocumentation.document; 
import static org.springframework.restdocs.restassured.RestAssuredRestDocumentation.documentationConfiguration; 

@SpringBootTest 
@RunWith(SpringJUnit4ClassRunner.class) 
public class OAuth2Test { 

    @Rule 
    public JUnitRestDocumentation restDocumentation = new JUnitRestDocumentation(); 

    private RequestSpecification spec; 

    private Map<String, String> queryParams; 

    private int serverPort = 8090; 

    @Before 
    public void setUp() { 
     this.spec = new RequestSpecBuilder().addFilter(documentationConfiguration(this.restDocumentation)).build(); 
     spec.port(serverPort); 
     spec.authentication().basic("myclient", "secret"); 
     spec.accept(MediaType.APPLICATION_JSON_VALUE); 
     queryParams = new HashMap<>(); 
     queryParams.put("username", "joe"); 
     queryParams.put("password", "abcd123"); 
     queryParams.put("grant_type", "password"); 
     queryParams.put("scope", "read"); 
    } 

    @Test 
    public void testOAuth() { 
     RestAssured.given(this.spec) 
       .filter(document("token")) 
       .queryParameters(queryParams) 
       .when().post("/oauth/token") 
       .then().assertThat().statusCode(is(200)); 
    } 
} 

하지만 난 그것을 실행할 때 RestDocs 구성을 설정하려고 할 때, 나는 NullPointerException이 얻을. 여기

java.lang.NullPointerException 
    at java.util.HashMap.putMapEntries(HashMap.java:500) 
    at java.util.HashMap.<init>(HashMap.java:489) 
    at org.springframework.restdocs.restassured.RestDocumentationFilter.getConfiguration(RestDocumentationFilter.java:77) 
    at org.springframework.restdocs.restassured.RestDocumentationFilter.filter(RestDocumentationFilter.java:59) 
    at com.jayway.restassured.filter.Filter$filter.call(Unknown Source) 
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48) 
    at com.jayway.restassured.filter.Filter$filter.call(Unknown Source) 
    at com.jayway.restassured.internal.filter.FilterContextImpl.next(FilterContextImpl.groovy:71) 
    at org.springframework.restdocs.restassured.RestAssuredRestDocumentationConfigurer.filter(RestAssuredRestDocumentationConfigurer.java:69) 
    at com.jayway.restassured.filter.Filter$filter.call(Unknown Source) 
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48) 
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113) 
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:141) 
    at com.jayway.restassured.internal.filter.FilterContextImpl.next(FilterContextImpl.groovy:71) 
    at com.jayway.restassured.filter.FilterContext$next.call(Unknown Source) 
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48) 
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113) 
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:133) 
    at com.jayway.restassured.internal.RequestSpecificationImpl.applyPathParamsAndSendRequest(RequestSpecificationImpl.groovy:1466) 
    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.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93) 
    at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325) 
    at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1218) 
    at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1027) 
    at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:815) 
    at com.jayway.restassured.internal.RequestSpecificationImpl.invokeMethod(RequestSpecificationImpl.groovy) 
    at org.codehaus.groovy.runtime.callsite.PogoInterceptableSite.call(PogoInterceptableSite.java:48) 
    at org.codehaus.groovy.runtime.callsite.PogoInterceptableSite.callCurrent(PogoInterceptableSite.java:58) 
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:52) 
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:154) 
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:182) 
    at com.jayway.restassured.internal.RequestSpecificationImpl.post(RequestSpecificationImpl.groovy:155) 
    at com.jayway.restassured.internal.RequestSpecificationImpl.post(RequestSpecificationImpl.groovy) 
    at com.greeno.ralts.api.test.OAuth2Test.testOAuth(OAuth2Test.java:55) 
    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.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) 
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) 
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) 
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26) 
    at org.springframework.restdocs.JUnitRestDocumentation$1.evaluate(JUnitRestDocumentation.java:63) 
    at org.junit.rules.RunRules.evaluate(RunRules.java:20) 
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57) 
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) 
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) 
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) 
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) 
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) 
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363) 
    at org.junit.runners.Suite.runChild(Suite.java:128) 
    at org.junit.runners.Suite.runChild(Suite.java:27) 
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) 
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) 
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) 
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) 
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) 
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363) 
    at org.junit.runner.JUnitCore.run(JUnitCore.java:137) 
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68) 
    at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47) 
    at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242) 
    at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70) 

는 널 포인터

enter image description here

그리고 이것의 근본 원인은 원인이 널지도를 전달 filter 방법 때문에 유형 FilterContextImpl이다 contextproperties 필드 ()가 null입니다

아마도 내가 설치를 망치고 있습니다. 여기에 가이드를 따르고 있습니다. https://docs.spring.io/spring-restdocs/docs/current/reference/html5/

+1

스택 추적을 큰 따옴표로 지정하지 마십시오. 가독성을 위해 중요한 모든 줄 바꿈을 망칠 수 있습니다. 게시물을 [편집]하고 올바른 형식의 스택 추적을 다시 복사하여 붙여 넣은 다음 코드로 서식을 지정하십시오. –

+0

@JimGarrison이 팁을 주셔서 감사합니다. – zero01alpha

+1

NPE의 원인인지 확신 할 수 없지만 REST Assured 2.8 이상을 사용해야합니다. https://docs.spring.io/spring-restdocs/docs/1.2.3 .RELEASE/reference/html5/# getting-started-requirements. –

답변

2

스프링 REST 문서 1.2.x requires REST Assured 2.8 (or later) 그리고 2.7을 사용하고 있습니다. REST Assured 2.7은 2.8과 동일한 방식으로 필터를 초기화하지 않습니다. 이로 인해 RestDocumentationFilter이 초기화되지 않은 상태로 남겨져 NPE가 발생합니다.