Как использовать VisibleForTesting для чистых тестов JUnit

Я использую чистые JUnit4 java-тесты над моими чистыми java файлами в моем проекте, но я не могу найти способ использовать @VisibleForTesting явно не делая публичную публикацию.

Пример:

@VisibleForTesting
public Address getAddress() {
  return mAddress;
}

Метод должен быть public, чтобы он был "общедоступным" для тестов, но в этом случае аннотация не имеет смысла? почему бы просто не использовать комментарий, если аннотация не будет делать ничего?

Ответ 1

Согласно документации для Android:

При желании вы можете указать, какой должна была быть видимость, если бы не тестирование; это позволяет инструментам ловить непреднамеренный доступ из производственного кода.

Пример:

@VisibleForTesting (в противном случае = VisibleForTesting.PRIVATE) публичный адрес getAddress()

Ответ 2

Сделайте метод package-private, и тест сможет его увидеть, если тест находится в соответствующем тестовом пакете (такое же имя пакета, что и производственный код).

@VisibleForTesting
Address getAddress() {
  return mAddress;
}

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

Точка аннотации - это ее соглашение и может использоваться в анализе статического кода, тогда как комментарий не может быть.

Ответ 3

Аннотация @VisibleForTesting используется в методах пакетов в Guava и не является частью JUnit API. Аннотация - это просто тег, указывающий, что метод может быть протестирован. Он даже не загружается в JVM.