Модульное тестирование обработчиков ответов vertx, если в обработчике есть объекты для макета - PullRequest
0 голосов
/ 09 апреля 2020

Пример обработчика ответа:

private static void handleGetRequest(RoutingContext ctx) {
    final HttpServerResponse response = ctx.response;
    try {
        A a = B.getSomeA();
        a.handleSomething();
    }
    catch (Exception ex) {System.out.println(ex);}
}

Как выполнить модульное тестирование вышеуказанного обработчика путем насмешки над объектами внутри обработчика?

1 Ответ

0 голосов
/ 10 апреля 2020

Вам необходимо ввести шов, где экземпляры A предоставляются для Handler. Такой шов позволяет вводить макеты / заглушки / подделки для целей тестирования.

Решением может быть что-то простое:

  class MyHandler implements Handler<RoutingContext> {
    private final Supplier<A> aSupplier;

    MyHandler(Supplier<A> aSupplier) { // <-- this is your test seam
      this.aSupplier = aSupplier;
    }

    @Override
    public void handle(RoutingContext ctx) {
      final HttpServerResponse response = ctx.response();
      try {
        A a = aSupplier.get(); // <-- a mocked version can return 'A' in any state
        a.handleSomething();
      }
      catch (Exception ex) {System.out.println(ex);}
    }
  }

Разделение Handler на его собственный тип дает дополнительное преимущество, заключающееся в возможности его тестирования изолированно, но это не так. т абсолютно необходимо.

...