Запрашиваемый маршрут не был отображен в Spark? - PullRequest
0 голосов
/ 07 января 2019

У меня есть простой restfull API в Java Spark. Модульный тест, который получает одного пользователя, проходит успешно, как и ожидалось, вместо случая сбоя с несуществующим пользователем. Модульный тест:

@Test
public void testGetNonExistingUser() {
    String userId = "5284c69d-ab72-4703-ba84-ce4feafd456f";
    Response response = request("GET", "/user/" + userId);
}

Возвращает вывод:

100 [Thread-0] INFO org.eclipse.jetty.util.log - Logging initialized @620ms
141 [Thread-0] INFO spark.embeddedserver.jetty.EmbeddedJettyServer - == Spark has ignited ...
141 [Thread-0] INFO spark.embeddedserver.jetty.EmbeddedJettyServer - >> Listening on 0.0.0.0:4567
143 [Thread-0] INFO org.eclipse.jetty.server.Server - jetty-9.3.6.v20151106
204 [Thread-0] INFO org.eclipse.jetty.server.ServerConnector - Started ServerConnector@575743e2{HTTP/1.1,[http/1.1]}{0.0.0.0:4567}
204 [Thread-0] INFO org.eclipse.jetty.server.Server - Started @725ms
2019-01-07 20:54:35 ERROR String:79 - checkIfIdAlreadyExists() User with id=5284c69d-ab72-4703-ba84-ce4feafd456f not exists
285 [qtp1828303595-19] INFO spark.http.matching.MatcherFilter - The requested route [/user/5284c69d-ab72-4703-ba84-ce4feafd456f] has not been mapped in Spark
java.io.FileNotFoundException: http://localhost:4567/user/5284c69d-ab72-4703-ba84-ce4feafd456f
    at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1909)
    at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1509)
(...)
300 [main] INFO spark.embeddedserver.jetty.EmbeddedJettyServer - >>> Spark shutting down ...
308 [main] INFO org.eclipse.jetty.server.ServerConnector - Stopped ServerConnector@575743e2{HTTP/1.1,[http/1.1]}{0.0.0.0:4567}
310 [main] INFO spark.embeddedserver.jetty.EmbeddedJettyServer - done

java.lang.AssertionError: Sending request failed: http://localhost:4567/user/5284c69d-ab72-4703-ba84-ce4feafd456f

    at org.junit.Assert.fail(Assert.java:88)
    at com.endpoints.moneyapp.utils.Utils.request(Utils.java:40)
(...)

Код, который обрабатывает это исключение в искре.

get("/user/:id", (request, response) -> userDAO.getUser(request.params(":id")), JSONUtil.json());

after((request, response) -> {
    response.type("application/json");
});

exception(IllegalArgumentException.class, (exception, request, response) -> {
    response.status(FAILED_RESPONSE);
    response.body(JSONUtil.toJson(new ResponseError(exception)));
});

exception(CustomException.class, (exception, request, response) -> {
    response.status(FAILED_RESPONSE);
    response.body(JSONUtil.toJson(new ResponseError(exception)));
});

В коде есть место, где выбрасывается исключение.

private void checkIfIdAlreadyExists(String id) throws CustomException {
if (!users.containsKey(id)) {
    String message = "User with id=" + id + " not exists";
    throw new CustomException(message);
}
}

Как правильно пройти модульный тест с несуществующим пользователем?

...