web-dev-qa-db-fra.com

Comment utiliser VisibleForTesting pour des tests JUnit purs

J'exécute des tests JUnit4 Java purs sur mes fichiers Java pur sur mon projet, mais je ne trouve pas le moyen d'utiliser @VisibleForTesting clairement sans rendre le processus public manuellement.

Ex:

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

La méthode doit être public pour la laisser "publique" aux tests, mais dans ce cas, l'annotation n'a pas de sens, n'est-ce pas? pourquoi ne pas simplement utiliser un commentaire si l'annotation ne fait rien?

9
Caipivara

Selon les documents Android:

Vous pouvez éventuellement spécifier ce que la visibilité aurait dû être sinon pour les tests; Cela permet aux outils de détecter les accès non souhaités à partir du code de production.

Exemple:

@VisibleForTesting (sinon = VisibleForTesting.PRIVATE) adresse publique getAddress ()

6
Rodrigo Borba

Rendre la méthode package-private et le test pourra la voir si le test est dans le package de test correspondant (même nom de package que le code de production).

@VisibleForTesting
Address getAddress() {
  return mAddress;
}

Pensez également à refactoriser votre code afin que vous n'ayez pas besoin de tester explicitement une méthode privée. Essayez de tester le comportement d'une interface publique. Un code difficile à tester peut indiquer que des améliorations peuvent être apportées au code de production.

Le point essentiel d'une annotation est que sa convention et pourrait être utilisé dans l'analyse de code statique, contrairement à un commentaire.

32
MikeJ

L'annotation @VisibleForTesting est utilisée dans les méthodes de package de Guava et ne fait pas partie de l'API JUnit. L'annotation est juste une balise pour indiquer que la méthode peut être testée. Il n'est même pas chargé dans la machine virtuelle Java.

2
Danail Tsvetanov