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

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

Ex:

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

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

3 ответов


по данным "документы" для Android:

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

пример:

@VisibleForTesting(в противном случае = VisibleForTesting.ЧАСТНЫЙ) публичный адрес getAddress()


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

@VisibleForTesting
Address getAddress() {
  return mAddress;
}

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

точка аннотации заключается в том, что ее конвенция и может использоваться в статическом анализе кода, в то время как комментарий не может.


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