Альтернативы @VisibleForTesting - PullRequest
       14

Альтернативы @VisibleForTesting

22 голосов
/ 22 декабря 2011

Я понимаю, что @VisibleForTesting нежелателен, поскольку он изменяет интерфейс класса только для целей тестирования.В идеале мы должны протестировать интерфейс, который мы на самом деле используем.Но что было бы хорошей альтернативой?

1 Ответ

38 голосов
/ 22 декабря 2011

Вы используете @VisibleForTesting, когда, как вы сказали, вы хотите протестировать часть кода, которую вы не предоставляете конечному пользователю. Если вы хотите проверить это, то, скорее всего, это означает, что это сложно или, по крайней мере, не тривиально. Два решения будут:

  1. Разделите метод, в котором вы вызываете его, на несколько методов, чтобы вы чувствовали себя более комфортно, если бы не один большой метод выполнял кучу вещей одновременно.
  2. Посмотрите, можете ли вы перенести поведение на внешний объект, который позаботится о нем.

Мне очень нравится # 2, когда вещи начинают усложняться, поскольку у меня может быть внешний объект, который я могу проверить и убедиться, что он работает без необходимости выставлять его через наш интерфейс.

Сказав это, иногда поведение не гарантирует извлечение метода в новый объект, и вы используете @VisibleForTesting просто для экономии времени. Опыт - это то, что говорит вам, когда оно того стоит (или нет).

...