2016-11-14 4 views
2

Я хочу проверить службу отдыха с помощью Rest Assured, но мой тест завершился неудачно, когда служба возвращает отрицательное нулевое значение.Rest Assured and float negatie zero

Rest Гарантированный Тест:

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

Я думаю, что проблема заключается в том, как путь к спасению, связанный с безопасностью, должен содержать строку '-0' для плавания. –

+1

С одной стороны, да, с другой стороны, ваша служба не должна возвращать '-0.0f' ... – xenteros

+0

Я думал об этом. Но почему бы не вернуться -0f? Javascript имеет это значение, и мы можем его использовать. Я также возвращаю NaN, +/- Infinity и Rest Assured, тестируя их нормально, и JS может использовать эти значения. –

ответ

2

Я выяснил, что лучше настроить REST Assured, чтобы вернуть все номера Json как BigDecimal, а затем использовать hamcrest closeTo.

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()'? Я использовал 'new JsonConfig (BIG_DECIMAL)' вместо – pwes

+0

@pwes 'import static io.restassured.config.JsonConfig.jsonConfig' вы также можете посмотреть пример [здесь] (https://github.com/babinslava/webcalc/blob/ master/src/test/java/com/upwork/WebCalculatorApplicationTests.java) –

+0

Статического метода больше нет, начиная с 3.0.2. Вероятно, API сильно изменился. – pwes