Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

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

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

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