[JAVA] Faisons JUnit.

Motivation

Avez-vous déjà entendu la phrase «Pour étudier quelque chose, il vaut mieux le faire»? Même si j'ai utilisé JUnit pour les affaires, je ne savais pas comment il était fabriqué. Depuis que j'ai quitté l'entreprise et que je suis en train de changer d'emploi, j'ai du temps, j'ai donc décidé de créer ma propre version de JUnit.

Version de JUnit à laquelle se référer

J'ai recherché le code source de JUnit, mais je n'ai trouvé que JUnit4 et JUnit5. (Autre que officiel, il existe d'autres que JUnit4 et JUnit5.) Il y a deux répertoires sous `` `junit4 / src / main / java / '' du code source JUnit4.

  1. junit
  2. org/junit

En regardant à l'intérieur, il semble que différentes sources soient stockées. Pour le moment, j'ai décidé de parler de `` junit ''. La raison en est la suivante.

  1. Proche du "Test Driven Development: By Example" de Kent Beck
  2. Code simple

Flux approximatif de JUnit

Comment avez-vous enquêté

Au début, j'ai lu la source de junit un par un, mais pour les raisons suivantes, je viens de saisir le flux principal.

  1. Il y a un nombre décent de cours.
  2. Je voulais un outil pour organiser les relations de classe, mais je ne le voulais pas.
  3. C'est pénible si vous le lisez tout le temps.

Exécutez JUnit

JUnit est exécuté selon le flux suivant. Si vous l'utilisez pour les affaires, l'environnement de développement intégré le fera bien. Pour plus de détails, veuillez consulter la [Page officielle] de JUnit (https://junit.org/junit4/).

  1. Créez une classe de test.
  2. Compilez la classe de test.
  3. Exécutez TestRunner.

L'explication de la création d'une classe de test et de la compilation d'une classe de test est omise.

Exécutez TestRunner.

Exécutez une commande comme celle ci-dessous.

java -cp Une classe qui exécute les tests de bibliothèque requis(Junit pour JUnit3.textui.TestRunner)Classe testée

L'important est de spécifier la classe pour exécuter le test et la classe à tester.

Analyse JUnit

Comment JUnit fait-il le travail? Existe-t-il un mécanisme spécial? L'essentiel est que vous ne faites rien de difficile, vous utilisez simplement Reflection.

Jetez un œil au point d'entrée

Vous savez que cette classe est le point d'entrée car vous avez une classe qui exécute les tests. Si vous regardez réellement junit4 / src / main / java / junit / textui / TestRunner.java '', il existe une méthode main () ''. Donc junit lit simplement la méthode main () ''. Je ne fais rien de spécial.

Comment exécuter la méthode de test

Maintenant que vous connaissez le point d'entrée, comment exécutez-vous la méthode de test? Diverses méthodes sont appelées à partir de la méthode `` main () '' plus tôt, mais celles qui exécutent réellement les méthodes sont les suivantes.

junit4/src/main/java/junit/framework/TestCase.java runTest()Méthode

En regardant le contenu, c'est juste `` method.invoke () ''. (la méthode est le type de méthode) C'est une caractéristique de Reflection.

Qu'est-ce que la réflexion?

En termes simples, Reflection est une fonctionnalité qui vous permet de lire et d'exécuter les informations de classe et de méthode au moment de l'exécution. C'était il y a longtemps, mais c'était célèbre comme magie noire. L'avantage de Reflection est que vous avez la flexibilité de travailler avec des classes et des méthodes. L'inconvénient est le revers de l'avantage. La vitesse d'exécution est lente car la machine virtuelle Java doit collecter des informations lors de l'exécution. Vous pouvez également exécuter des méthodes privées, donc si vous ne l'utilisez pas correctement, ce sera erratique.

Essayez de mettre en œuvre

Structure de classe

J'ai les connaissances minimales nécessaires pour essayer de créer JUnit ci-dessus. J'ai pensé à la classe dont j'avais besoin, en supposant qu'elle offrirait la fonctionnalité minimale.

--Assert (fournit assertEquals) --TestResult (maintenir le résultat du test) --TestRunner (point d'entrée) --TestCase (super classe de classe de test)

code

Voir GitHub. Actuellement, la structure des classes est légèrement différente.

Comment était-ce

Les bons points à essayer sont les suivants.

  1. Après une longue période de conception de cours, je suis devenu un exerciseur cérébral.
  2. Il est plus facile de rester motivé que la lecture de code

Recommended Posts

Faisons JUnit.
Junit
Créons vous-même une instance avec .new. .. ..
JUnit 4 notes
Histoire de JUnit
Créons un environnement de développement Java (mise à jour)
Mémorandum JUnit
Créons une API REST à l'aide de WildFly Swarm.
Créons un processus chronométré avec la minuterie de Java! !!
Créer un onglet personnalisé avec SwiftUI 2.0
Créons un framework Web ultra-simple avec Java
[Java] Créons un Minecraft Mod 1.14.4 [Introduction]
[Java] Créons un Minecraft Mod 1.16.1 [Introduction]
Créons rapidement une application qui utilise Firestore! !!
[Java] Créons un Minecraft Mod 1.14.4 [99. Mod output]