Je suis nouveau au test unitaire. À propos du but d'utiliser vs p> Quelle est la différence? P> p > @Before code> Annotation dans Junit 4 Strong>. Je ne connais tout simplement pas le point de l'utiliser:
7 Réponses :
Dans ce cas, il peut ne pas être nécessaire, car l'initialisation est vraiment simple. p>
Si vous avez une journalisation, une initialisation complexe ou une nécessité de libérer certaines ressources, vous devez utiliser @ Beforeclass et @afterclass p>
Vous pouvez utiliser un bloc statique pour faire cette initialisation. static {...} Le seul cas différent est lorsque votre code d'initialisation jette une exception vérifiée
Qu'en est-il de la libération des ressources? Vous ne pouvez pas faire cela dans un bloc statique. Eh bien, vous pouvez, mais pas quand c'est vraiment nécessaire.
Vous pouvez acquérir des ressources en bloc statique et utiliser finaliser (). Pas la meilleure approche. L'API Junit permet au développeur de savoir moins Java et d'écrire un meilleur code)
Dans votre exemple particulier - pas beaucoup. Cependant, il existe également une annotation @Before qui fonctionnera avant chaque test de votre classe. Jetez un coup d'œil à http://elftectechy.com / 2011/05/17 / Junit4-avant-vs-beforeclass-après-vs-après-class , il est expliqué bien là-bas. P>
Presque pas de différence. Mais si le constructeur de sandwich code> jette une exception, vous ne pouvez pas l'initialiser directement
sandwich de nourriture privée statique = nouveau sandwich (); code> mais doit envelopper l'initialisation avec
essayer code> bloc. Toutefois, la méthode
initiale () code> peut être déclarée sous forme
jette myException code>, de sorte que le cas de test échouera si l'exception est effectivement lancée lors de l'initialisation. p>
Les instances créées ici seront réutilisées dans tous vos alors que généralement @beforeclass code> est pour les initialisations statiques. P>
@Test code> S p>
@Before code> est par
@Test code>. p>
@beforeclass code> est réservé aux objets relativement coûteux à instancier.
par exemple. Connexions de base de données P>
Supposons que vous aviez toutes vos données liées à la nourriture (disons un menu) Configuration au backend dans une table de base de données. Vos cas de test alimentaire pourraient ensuite se rapporter à la mise à jour du menu (toutes les opérations de crudement fondamentalement). P>
au lieu d'ouvrir une connexion DB pour chaque cas de test (en utilisant Maintenant, l'utilisation d'une méthode a du sens, car la configuration De même, vous utiliserez le @Before code>); Il serait sage si vous le faites juste
@beforeclass code>. p>.
code> à partir d'un
DataSource code>) et vous ne pourrez pas y parvenir à une seule ligne dans laquelle vous déclarez votre
Connection code> objet. P>
@afterclass code> sur Det Down em> strong> Votre configuration globale (pour tous les cas de test), c'est-à-dire la fermeture de votre connexion de base de données ici. p>
Je pense que l'idée est comme ça: Vous utilisez @Afterclass vers des ressources gratuites. Ensuite, il est logique d'avoir @beforeclass pour les acquérir. Parce que ce n'est peut-être pas une bonne idée de laisser le développeur à deviner qu'il doit utiliser un bloc statique. P>
Disons que vous avez deux tests JUNIT qui prolongent une classe de base commune.
Et disons que la classe de base a à la fois un bloc d'initialisateur statique et em> a Donc, si vous avez un très em> de calcul ou de ressource coûteux que vous avez besoin installé dans un ensemble em> des cas de test partageant une classe de base commune, vous pouviez alors Utilisez le bloc d'initialisateur statique pour cela. P> @beforeclass code> méthode.
Dans ce cas, le bloc d'initialisateur statique fonctionnera
@beforeclass code> fonctionnera