Как использовать 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.