[JAVA] Qu'est-ce que le @VisibleForTesting de Guava?

Aperçu

Exemple de code

import com.google.common.annotations.VisibleForTesting;

public class Sample {

    @VisibleForTesting
    String load() {
        //réduction
    }

}

Un exemple d'utilisation détaillé est expliqué dans Sortons de la méthode statique pour écrire un test unitaire # 1 Principe / Wrap method.

Avantages de l'octroi de @VisibleForTesting

Il sert de marqueur pour montrer pourquoi vous augmentez la visibilité

Il peut être utilisé comme marqueur pour montrer qu '"il augmente la visibilité du code de test". L'annotation seule n'a pas de fonction spéciale, c'est juste un marqueur (appelé annotation de marqueur).

Vous pouvez vérifier les erreurs avec l'analyse statique

Par exemple, dans l'un des outils d'analyse statique SonarQube, les membres et les méthodes avec @ VisibleForTesting sont par erreur (autre que le code de test). Il existe une règle pour vérifier si elle est accessible par le code d'une autre classe. En utilisant cette règle, il peut être possible de détecter un comportement involontaire à un stade précoce.

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

point important

Comme indiqué dans JavaDoc, la plage d'accès est initialement définie de ** privé à la valeur par défaut (package). Utilisé pour ** pour passer à (privé). L'écriture de tests unitaires est suffisante par défaut et le passage à public ou protected est une mauvaise conception.

Le plugin VisibleForTesting pour SonarQube vous permet de vérifier les modificateurs d'accès incorrects.

Autres annotations @ VisibleForTesting

Certaines autres bibliothèques et API ont des annotations similaires.

Bibliothèque / API Nom de classe complet
AssertJ org.assertj.core.util.VisibleForTesting
Android androidx.annotation.VisibleForTesting
Apache Flink org.apache.flink.annotation.VisibleForTesting

Recommended Posts

Qu'est-ce que le @VisibleForTesting de Guava?
Qu'est-ce que Cubby
Qu'est-ce que 'java
Qu'est-ce que maven?
Qu'est-ce que Jackson?
Qu'est-ce que soi
Qu'est-ce que Jenkins
Qu'est-ce que ArgumentMatcher?
Qu'est-ce que IM-Juggling?
Qu'est-ce que les paramètres
Qu'est-ce que SLF4J?
Qu'est-ce que la façade? ??
Qu'est-ce que Java <>?
Qu'est-ce que Gradle?
Qu'est-ce que POJO
Qu'est-ce que 'java
Qu'est-ce que centOS
Qu'est-ce que RubyGem?
Qu'est-ce que before_action?
Qu'est-ce que Docker
Qu'est-ce que Byte?
Qu'est-ce que Tomcat
Qu'est-ce que l'assemblage Maven?
Qu'est-ce que `docker-compose up`?
Qu'est-ce qu'un constructeur
Qu'est-ce que vue cli
Qu'est-ce qu'une interface
Qu'est-ce que le moi de Ruby?
Qu'est-ce que le codage en dur?
Qu'est-ce qu'un flux
Qu'est-ce que l'attr_accessor de Ruby?
Qu'est-ce qu'une permission refusée?
Qu'est-ce que le contrôle d'instance?
Qu'est-ce qu'un initialiseur?
Qu'est-ce que Spring Tools 4
Qu'est-ce qu'un opérateur?
Qu'est-ce que l'orientation objet?
Qu'est-ce qu'un modèle MVC?
Qu'est-ce qu'une annotation?
Qu'est-ce que la technologie Java?
Qu'est-ce que Java API-java
Qu'est-ce que @ (variable d'instance)?
Qu'est-ce que l'artefact de Gradle?
Qu'est-ce que l'audit JPA?
[Java] Qu'est-ce que flatMap?
Qu'est-ce qu'un servlet?
Qu'est-ce que le développement Web?
[Java] Qu'est-ce que ArrayList?
Qu'est-ce que l'orientation objet après tout?
Qu'est-ce que HttpSession session = request.getSession ();
Qu'est-ce que l'assertion Java? Résumé.
[Mémorandum] Qu'est-ce qu'une erreur?
Qu'est-ce qu'une classe wrapper?