[JAVA] Was ist Guavas @VisibleForTesting?

Überblick

Beispielcode

import com.google.common.annotations.VisibleForTesting;

public class Sample {

    @VisibleForTesting
    String load() {
        //Kürzung
    }

}

Ein detailliertes Verwendungsbeispiel wird in Lassen Sie uns von der statischen Methode abbrechen, um einen Unit-Test # 1-Prinzip / Wrap-Methode zu schreiben erläutert.

Vorteile der Gewährung von @VisibleForTesting

Es dient als Markierung, um zu zeigen, warum Sie die Sichtbarkeit erhöhen

Es kann als Markierung verwendet werden, um anzuzeigen, dass "die Sichtbarkeit für den Testcode erhöht wird". Die Annotation allein hat keine spezielle Funktion, sondern ist nur ein Marker (als Marker-Annotation bezeichnet).

Sie können mit statischer Analyse nach Fehlern suchen

In einem der statischen Analysetools SonarQube sind beispielsweise Mitglieder und Methoden mit "@ VisibleForTesting" fälschlicherweise falsch (außer Testcode). Es gibt eine Regel, um zu überprüfen, ob auf den Code einer anderen Klasse zugegriffen wird. Mit dieser Regel kann möglicherweise unbeabsichtigtes Verhalten frühzeitig erkannt werden.

Rule S5803: Class members annotated with @VisibleForTesting should not be accessed from production code

wichtiger Punkt

Wie in JavaDoc angegeben, ist der Zugriffsbereich ursprünglich von ** privat auf den Standardwert (Paket) festgelegt. Wird für ** verwendet, um zu (privat) zu wechseln. Das Schreiben von Komponententests ist standardmäßig ausreichend, und das Wechseln zu öffentlich oder geschützt ist ein schlechtes Design.

Darüber hinaus kann mit dem VisibleForTesting-Plugin für SonarQube überprüft werden, ob ein falscher Zugriffsmodifikator hinzugefügt wurde.

Andere "@ VisibleForTesting" -Anmerkungen

Einige andere Bibliotheken und APIs haben ähnliche Anmerkungen.

Bibliothek / API Vollqualifizierter Klassenname
AssertJ org.assertj.core.util.VisibleForTesting
Android androidx.annotation.VisibleForTesting
Apache Flink org.apache.flink.annotation.VisibleForTesting

Recommended Posts

Was ist Guavas @VisibleForTesting?
Was ist Cubby?
Was ist java
Was ist Maven?
Was ist Jackson?
Was ist Selbst
Was ist Jenkins?
Was ist ArgumentMatcher?
Was ist IM-Jonglieren?
Was ist params
Was ist SLF4J?
Was ist Fassade? ??
Was ist Java <>?
Was ist Gradle?
Was ist POJO?
Was ist java
Was ist centOS?
Was ist RubyGem?
Was ist before_action?
Was ist Docker?
Was ist Byte?
Was ist Tomcat?
Was ist Maven Assembly?
Was ist Docker-Compose?
Was ist ein Konstruktor?
Was ist vue cli
Was ist eine Schnittstelle?
Was ist Rubys Selbst?
Was ist harte Codierung?
Was ist ein Stream?
Was ist Rubys attr_accessor?
Was ist die Erlaubnis verweigert?
Was ist Instanzsteuerung?
Was ist ein Initialisierer?
Was ist Spring Tools 4?
Was ist ein Operator?
Was ist Objektorientierung?
Was ist ein MVC-Modell?
Was ist eine Anmerkung?
Was ist Java-Technologie?
Was ist Java API-Java?
Was ist @ (Instanzvariable)?
Was ist Gradles Artefakt?
Was ist JPA-Prüfung?
[Java] Was ist flatMap?
Was ist ein Servlet?
Was ist Webentwicklung?
[Java] Was ist ArrayList?
Was ist eigentlich objektorientiert?
Was ist HttpSession session = request.getSession ();
Was ist Java Assertion? Zusammenfassung.
[Memorandum] Was ist ein Fehler?
Was ist eine Wrapper-Klasse?