В приложении Spring Boot REST я хочу проверить с помощью Cucumber-jvm, что возвращаемый JSON - это именно то, что я ожидаю. Однако, поскольку мне приходится использовать двойные кавычки вокруг имен ключей JSON, Cucumber не может определить правильный метод определения шага и, следовательно, тест не может пройти.
Вот ожидаемый результат JSON:
{"fields":[],"errorMsg":"BIN not found"}
Определение шага огурца:
Given bin number is <bin>
When binlookup searches with this bin number
Then binlookup returns <result> and status code <code>
Examples:
| bin | result | code |
| "222222" | "{\"fields\":[\"bin\"]\,\"errorMsg\":\"Invalid Argument\"}" | 404 |
Соответствующий метод:
@Then("^binlookup returns \"([^\"]*)\" and status code \\d$")
public void binlookup_returns_and_status_code(String result, Integer code) throws Exception {
assertThat(this.results.getResponse().getContentType()).isEqualTo(MediaType.APPLICATION_JSON_UTF8_VALUE);
assertThat(this.results.getResponse().getStatus()).isEqualTo(code);
assertThat(this.results.getResponse().getContentAsString().length()).isNotEqualTo(0);
assertThat(this.results.getResponse().getContentAsString()).isEqualTo(result);
}
При запуске теста у меня правильно вернул JSON:
{"fields":["bin"],"errorMsg":"Invalid Argument"}
Но я вижу ошибки теста, и Cucumber не может определить мой метод, и дает мне такие советы, как:
You can implement missing steps with the snippets below:
@Then("binlookup returns {string}\\:[],\\{string}\\:\\{string} and status code {int}")
public void binlookup_returns_and_status_code(String string, String string2, String string3, Integer int1) {
// Write code here that turns the phrase above into concrete actions
throw new PendingException();
}
Очевидно, он связывает первый "
с первым экранированным "
и видит {\"fields
в качестве первого параметра, но это неверно.
Но я не могу заключить в кавычки строку JSON с ' '
, потому что это не будет иметь место.
Что я могу сделать?
<Ч />
Если это невозможно, как я могу убедиться, что в JSON есть ожидаемые данные?