Nous nommons en fait nos packages de test comme leurs homologues à tester. On se retrouve donc avec cette structure:
src/main/java
com.hello.world
helloWorld.java
src/test/java
com.hello.world
helloWorldTest.java
J'ai toujours pensé que ce n'était pas assez intelligent car vous ne pouvez pas faire la distinction entre "test" et "to-test" si seulement fourni avec le nom du package. D'un autre côté, je n'ai pas vraiment trouvé de cas où cela soit important. Est-ce une bonne pratique d'avoir les mêmes conventions de dénomination pour les deux packages (pour les cas de test et les classes source)? Sinon, quelle serait une meilleure approche?
XXXTest()
encom.hello.world.test.helloWorldTest.java
. L'avis général serait de ne faire apparaître "Test" qu'une seule fois dans le chemin, donc (a) utilisez test dans le nom du package (et nommez le fichier de test de la même manière que le fichier sous test) ou (b) définissez le nom du package comme même et ajoutez "test" au nom de fichier / classe.Réponses:
C'est une bonne convention.
Parfois, vous voulez également écrire des tests unitaires pour les classes et méthodes privées des packages. Vous ne pourrez pas les appeler à partir d'une classe de test unitaire placée dans un autre package.
Il ne devrait pas y avoir de confusion quant au fait d'avoir des classes de tests unitaires dans le même espace de noms car elles ne devraient pas se trouver dans le chemin de classe lors de la compilation ou de l'exécution du code de production.
Voici un exemple d'un petit module avec une interface publique, une classe d'usine publique et deux classes d'implémentation de paquet privé:
Masquer les implémentations de l'interface Transmogrifier pourrait être un choix de conception valide. C'est peut-être la responsabilité de la classe d'usine de choisir la mise en œuvre.
Étant donné que les implémentations sont privées du package, vous devez placer les classes de test unitaire dans le même package si vous souhaitez les tester directement. Si vous avez vos classes de tests unitaires dans un autre package, vous n'avez accès directement à l'interface publique et à la classe d'usine qu'à partir de vos tests.
la source
MapTransmogrifier
etListTransmogrifier
et décider qu'ils pourraient être transformés en une seule classe, de sorte que vous créezListMapTransmogrifier
, modifiez l'usine à l' utiliser et de supprimer les deux classes. Le code ne compile plus, vous devez donc modifier chaque test dans les deuxMapTransmogrifierTest
etListTransmogrifierTest
le faire compiler. Un test échoue. Était-ce dû à la modification des tests ou à la créationListMapTransmogrifier
? Sort le débogueur pour le découvrir ... alternativement lorsque les tests utilisent l'usine, vous faites ce refactor et tout compile toujours ...