2016-11-14 31 views
2

我想用Rest Assured測試我的休息服務,但當服務返回負值時,我的測試失敗。其他保證和浮動負數

放心測試:

String methodName="multiply"; 
    float[] operands = {1f,-2.5f,0}; 
    float result = operands[0] * operands[1] * operands[2]; 
    Response response = given(). 
      pathParam("a",operands[0]). 
      pathParam("b",operands[1]). 
      pathParam("c",operands[2]). 
      contentType(JSON). 
      log().ifValidationFails(). 
     when(). 
      get("/"+methodName+"/{a}/{b}/{c}"). 
     then(). 
      assertThat().statusCode(200). 
      body("result",equalTo(result)); 

錯誤:

java.lang.AssertionError: JSON path result doesn't match. 
Expected: <-0.0F> 
    Actual: 0.0 

結果JSON:

{"result":-0.0} 

爲什麼當我休息服務返回負零值測試失敗?

+0

我認爲一個問題是如何放心的json路徑將字符串'-0'轉換爲浮動。 –

+1

一方面是的,另一方面,你的服務不應該返回'-0.0f' ... – xenteros

+0

我在想它。但爲什麼不返回-0f? Javascript有這個價值,我們可以使用它。我還會返回NaN,+/- Infinity和Rest Assured通常進行測試,JS可以使用這些值。 –

回答

2

我發現最好將REST Assured配置爲將所有Json數字返回爲BigDecimal,然後使用hamcrest closeTo matcher。

String methodName="multiply"; 
double[] operands = {1,-2.5,0}; 
double result = operands[0] * operands[1] * operands[2]; 
Response response = given(). 
     config(RestAssured.config().jsonConfig(jsonConfig().numberReturnType(BIG_DECIMAL))). 
     pathParam("a",operands[0]). 
     pathParam("b",operands[1]). 
     pathParam("c",operands[2]). 
     contentType(JSON). 
     log().ifValidationFails(). 
    when(). 
     get("/"+methodName+"/{a}/{b}/{c}"). 
    then(). 
     assertThat().statusCode(200). 
     log().ifValidationFails(). 
     body("result",closeTo(BigDecimal.valueOf(result),new BigDecimal("1E-20"))); 
+0

無參數'jsonConfig()'從哪裏來?我使用了'新的JsonConfig(BIG_DECIMAL)'而不是 – pwes

+0

@pwes'import static io.restassured.config.JsonConfig.jsonConfig'你也可以看看例子[here](https://github.com/babinslava/webcalc/blob/ master/src/test/java/com/upwork/WebCalculatorApplicationTests.java) –

+0

從3.0.2開始,靜態方法不再存在。可能API改變了很多。 – pwes