2017-01-09 4 views
0

私はrestAssuredを使用して、アプリケーションでレストサービスをテストします。アプリケーションはJson形式を受け取ります。 RestAssuredは、Restサービスを呼び出す前に、ToStringメソッドを使用してBeanクラスのフィールド(ENUM)を非直列化してレスポンスを達成する必要があります。 restAssuredだけrequestBodyを送信RestAssuredでJsonをデシリアライズする設定

public enum Condition { 

    SUCCESS("success"), 
    FAILURE("failure"); 

    private String condition; 

    private Condition(String condition) { 
     this.condition = condition; 
    } 

    @Override 
    public String toString() { 
     return this.condition; 
    } 
} 


public class Order {  
    private String order_id; 
    private Condition status; 

    //Getters and Setters 
} 


import static com.jayway.restassured.RestAssured.given; 
import static com.jayway.restassured.RestAssured.preemptive; 
import static org.assertj.core.api.Assertions.assertThat; 
import static com.jayway.restassured.config.RestAssuredConfig.config; 
import static com.jayway.restassured.config.ObjectMapperConfig.objectMapperConfig; 

public class RestTests {  

    //.....// 

    private static RequestSpecification spec; 
    public static final Order inputOrderInvalid = 
      new Order.Builder() 
      .setOrderId("213424") 
      .setCondition(Condition.SUCCESS)   
      .build(); 


    @BeforeClass 
    public static void initSpec(){ 

     ObjectMapper objectMapper = new ObjectMapper(); 
     objectMapper.configure(DeserializationFeature.READ_ENUMS_USING_TO_STRING, true);   
     objectMapper.configure(DeserializationFeature.FAIL_ON_NUMBERS_FOR_ENUMS, false); 

     RestAssuredConfig config = config().objectMapperConfig(objectMapperConfig().jackson2ObjectMapperFactory((cls, charset) -> objectMapper)); 


     spec = new RequestSpecBuilder() 
       .setConfig(config) 
       .setContentType(ContentType.JSON)        
       .setBaseUri(ENDPOINT_URI) 
       .addFilter(new ResponseLoggingFilter())//log request and response for better debugging. You can also only log if a requests fails. 
       .addFilter(new RequestLoggingFilter()) 
       .build(); 
    } 


     @Test 
    public void orderInvalid(){ 
     JsonPath error = given() 
      .spec(spec) 
      .body(inputOrderInvalid)    
      .when() 
      .post(SERVICE) 
      .then() 
      .statusCode(HttpStatus.SC_BAD_REQUEST) 
      .extract() 
      .jsonPath(); 

     assertThat(error.getString("code")).isEqualTo("INCORRECT_VALUE"); 
    } 
    //.....// 
} 

:それはそう

{ 
    "order_id" : "12312546", 
    "condition" : "SUCCESS" 
} 

ObjectMapperにsetted設定が無視されたコードを実行します 。 (DeserializationFeature.READ_ENUMS_USING_TO_STRING)。

誰でも手伝ってもらえますか?

答えて

1

私の目標は、のtoStringを使用してシリアライズすることだったので、私は中にシリアル化機能を変更する必要があります:それは問題を解決し

objectMapper.configure(SerializationFeature.WRITE_ENUMS_USING_TO_STRING, true); 

:に

objectMapper.configure(DeserializationFeature.READ_ENUMS_USING_TO_STRING, true); 

関連する問題