[JAVA] Profitez de JUnit 5 avec Eclipse avant la sortie officielle

Aperçu

Le framework de test Java JUnit sera publié dans la version majeure 5 cette année. Lors d'une conférence appelée Eclipse Converge 2017 tenue à San Jose l'autre jour, j'ai demandé comment utiliser cette JUnit 5 avec Eclipse, donc mon PC personnel pour Windows 10 Je l'ai essayé avec.

JUnit 5 Il s'agit de la cinquième version majeure de JUnit. Il a été retravaillé pour prendre en charge les nouvelles spécifications de langage pour Java 8 et 9.

Nouvelles spécifications linguistiques que JUnit 4 ne pouvait pas couvrir

référence

Pour les nouvelles fonctionnalités et précautions dans JUnit 5, il existe déjà de nombreux documents en japonais, veuillez donc vous y référer.

environnement

JUnit 5 sera pris en charge en version bêta à partir de Milestone 6 dans Eclipse 4.7.0 (Oxygen). Vous pouvez le télécharger à partir de ce qui suit.

https://eclipse.org/downloads/packages/release/Oxygen/M6

Depuis le 5 avril 2017, au moment de la rédaction de cet article, il ne semble pas y avoir de plug-in de localisation japonais 4.7.x.

http://mergedoc.osdn.jp/

Les autres environnements sont les suivants.

OS Windows 10
Java SE 1.8.0_121
Eclipse 4.7.0-M6
git 2.12.2.windows.1

introduction

Créez un plug-in Eclipse pour JUnit 5 à partir du code source et installez-le sur votre Eclipse (série 4.7).

Suivez les étapes sur https://wiki.eclipse.org/JDT_UI/JUnit_5. Notez que git est requis pour télécharger le fichier. Bien sûr, vous avez également besoin d'Eclipse. Je ne pense pas qu'il y ait de problème avec Eclipse tant que vous téléchargez la version Java. Si vous avez téléchargé "pour les testeurs", veuillez installer l'outil de développement de plug-ins séparément. Le plug-in est intégré à Eclipse, vous n'avez donc pas besoin d'Ant, Maven ou Gradle.

Préparation de l'espace de travail pour le développement de plug-ins

Ce n'est pas obligatoire, mais bon, vous ne voulez pas le mélanger avec votre espace de travail de développement habituel, c'est donc une bonne idée d'en avoir un.

Consultez https://github.com/noopur2507/eclipse-junit5.git

Vous n'avez pas besoin de créer de fichiers, alors téléchargez simplement https://github.com/noopur2507/eclipse-junit5/archive/master.zip. Dans ce cas, un fichier appelé eclipse-junit5-master.zip sera téléchargé. Veuillez importer et placer le contenu de ce fichier zip comme suit.

--Importer org.eclipse.jdt.junit5.runtime dans l'espace de travail de développement du plugin

Bocaux JUnit-5-JAR placés dans des dropins

ju5_1.png

ju5_9.png

Cloner git: //git.eclipse.org/gitroot/jdt/eclipse.jdt.ui.git

Veuillez cloner en utilisant git. Aucun réglage de clé spécial n'est requis. Il faut plus de 10 minutes pour tous les télécharger.

$ git clone git://git.eclipse.org/gitroot/jdt/eclipse.jdt.ui.git
Cloning into 'eclipse.jdt.ui'...
remote: warning: ignoring extra bitmap file: objects/pack/pack-dffcdea022429c2393e25dfe14e4b833fb5d7dd0.pack
remote: Counting objects: 474929, done.
remote: Compressing objects: 100% (715/715), done.

remote: Compressing objects: 100% (715/715), done.
remote: Total 474929 (delta 364), reused 0 (delta 0)
Receiving objects: 100% (474929/474929), 73.43 MiB | 125.00 KiB/s, done.
Resolving deltas: 100% (249502/249502), done.
Checking out files: 100% (12727/12727), done.

Veuillez vous déplacer après le clonage.

$ cd eclipse.jdt.ui

Passer à la branche BETA_JUNIT5

eclipse.jdt.ui $ git checkout -b BETA_JUNIT5
Switched to a new branch 'BETA_JUNIT5'

Tirez BETA_JUNIT5 d'origine

eclipse.jdt.ui $ git pull origin BETA_JUNIT5
From git://git.eclipse.org/gitroot/jdt/eclipse.jdt.ui
 * branch                  BETA_JUNIT5 -> FETCH_HEAD
Auto-merging org.eclipse.jdt.junit.core/src/org/eclipse/jdt/internal/junit/JunitPreferenceInitializer.java
Merge made by the 'recursive' strategy.
 org.eclipse.jdt.junit.core/plugin.properties       |   3 +-
 org.eclipse.jdt.junit.core/plugin.xml              |  13 +-
 .../jdt/internal/junit/JUnitCorePlugin.java        |   5 +-
 .../eclipse/jdt/internal/junit/JUnitMessages.java  |  10 +-
 .../jdt/internal/junit/JUnitMessages.properties    |   6 +-
 .../internal/junit/JUnitPreferencesConstants.java  |  38 ++-
 .../internal/junit/JunitPreferenceInitializer.java |  24 +-
 .../internal/junit/buildpath/BuildPathSupport.java |  90 ++++++-
 .../junit/buildpath/JUnitContainerInitializer.java |  59 ++++-
 .../internal/junit/launcher/JUnit5TestFinder.java  | 286 ++++++++++++++++++++
 .../JUnitLaunchConfigurationConstants.java         |   5 +-
 .../internal/junit/launcher/TestKindRegistry.java  |  12 +-
 .../internal/junit/model/ITestRunListener2.java    |  16 +-
 .../eclipse/jdt/internal/junit/model/IXMLTags.java |  16 +-
 .../junit/model/RemoteTestRunnerClient.java        |   2 +-
 .../jdt/internal/junit/model/TestCaseElement.java  |  12 +-
 .../jdt/internal/junit/model/TestElement.java      |  55 +++-
 .../eclipse/jdt/internal/junit/model/TestRoot.java |   4 +-
 .../jdt/internal/junit/model/TestRunHandler.java   |  14 +-
 .../jdt/internal/junit/model/TestRunSession.java   | 107 ++++++--
 .../junit/model/TestRunSessionSerializer.java      |  28 +-
 .../jdt/internal/junit/model/TestSuiteElement.java |  12 +-
 .../internal/junit/util/CoreTestSearchEngine.java  |  60 ++++-
 .../src/org/eclipse/jdt/junit/JUnitCore.java       |  10 +-
 .../launcher/JUnitLaunchConfigurationDelegate.java | 107 ++++++--
 org.eclipse.jdt.junit.runtime/META-INF/MANIFEST.MF |   8 +-
 .../junit/runner/FirstRunExecutionListener.java    |   4 +-
 .../jdt/internal/junit/runner/ITestIdentifier.java |   5 +-
 .../jdt/internal/junit/runner/ITestLoader.java     |   5 +-
 .../internal/junit/runner/IVisitsTestTrees.java    |   4 +-
 .../jdt/internal/junit/runner/MessageIds.java      |  24 +-
 .../internal/junit/runner/RemoteTestRunner.java    |  81 ++++--
 .../jdt/internal/junit/runner/TestIdMap.java       |   2 +-
 .../junit/runner/TestReferenceFailure.java         |   7 +-
 .../junit/runner/junit3/JUnit3Identifier.java      |  10 +-
 .../junit/runner/junit3/JUnit3TestLoader.java      |   4 +-
 .../junit/runner/junit3/JUnit3TestReference.java   |  22 +-
 org.eclipse.jdt.junit/plugin.xml                   |  11 +-
 .../junit/buildpath/JUnitContainerWizardPage.java  |  19 +-
 .../junit/ui/JUnitClasspathFixProcessor.java       |  38 ++-
 .../jdt/internal/junit/ui/JUnitMessages.java       |  12 +-
 .../jdt/internal/junit/ui/JUnitMessages.properties |  10 +-
 .../eclipse/jdt/internal/junit/ui/JUnitPlugin.java |  53 +++-
 .../internal/junit/ui/JUnitQuickFixProcessor.java  |  47 +++-
 .../junit/ui/JUnitUIPreferencesConstants.java      |  18 +-
 .../jdt/internal/junit/ui/OpenTestAction.java      |  30 ++-
 .../jdt/internal/junit/ui/TestRunnerViewPart.java  |  21 +-
 .../junit/ui/TestSessionLabelProvider.java         |  45 ++--
 .../eclipse/jdt/internal/junit/ui/TestViewer.java  | 152 ++++++++---
 .../jdt/internal/junit/util/JUnitStubUtility.java  |   8 +
 .../junit/wizards/NewTestCaseCreationWizard.java   |  69 +++--
 .../junit/wizards/SuiteClassesContentProvider.java |   4 +-
 .../jdt/internal/junit/wizards/WizardMessages.java |   7 +-
 .../junit/wizards/WizardMessages.properties        |   9 +-
 .../launcher/JUnitLaunchConfigurationTab.java      |  27 +-
 .../jdt/junit/launcher/JUnitLaunchShortcut.java    |  48 ++--
 .../junit/wizards/NewTestCaseWizardPageOne.java    | 290 ++++++++++++++++-----
 .../jdt/junit/wizards/NewTestSuiteWizardPage.java  |   4 +-
 .../internal/junit4/runner/JUnit4Identifier.java   |  10 +-
 .../internal/junit4/runner/JUnit4TestLoader.java   |   3 +-
 .../junit4/runner/JUnit4TestReference.java         |   6 +-
 .../corext/codemanipulation/StubUtility.java       |   2 +-
 .../templates/default-templates.properties         |   4 +-
 org.eclipse.jdt.ui/templates/default-templates.xml |  15 +-
 64 files changed, 1728 insertions(+), 404 deletions(-)
 create mode 100644 org.eclipse.jdt.junit.core/src/org/eclipse/jdt/internal/junit/launcher/JUnit5TestFinder.java

Ce code n'a pas non plus besoin d'être généré avec un outil de génération tel que Maven. À partir des dossiers mis à jour, importez les 5 suivants dans l'espace de travail de développement du plugin.

  1. org.eclipse.jdt.ui
  2. org.eclipse.jdt.junit
  3. org.eclipse.jdt.junit.core
  4. org.eclipse.jdt.junit.runtime
  5. org.eclipse.jdt.junit4.runtime

ju5_4.png ju5_5.png ju5_6.png ju5_8.png ju5_7.png

Exporter et installer des plugins

Sélectionnez "Plug-ins et fragments déployables" dans "Fichier" -> "Exporter" -> "Développement de plug-ins" dans la barre de menu Eclipse. Bien sûr, si vous ne disposez pas de l'outil de développement de plug-ins, vous n'aurez pas le choix. Soyez prudent si vous disposez de la version Test Developer.

ju5_10.png

ju5_11.png

Si la case à cocher "Installer sur l'hôte. Référentiel:" sous "Destination" est cochée, l'installation du plug-in se poursuivra dès que l'exportation du plug-in sera terminée. Une fois l'installation terminée, Eclipse vous demandera de le redémarrer, alors redémarrons-le.

Sous Windows, si vous avez Eclipse sur votre lecteur C et que le lanceur disparaît, téléchargez à nouveau Eclipse et copiez uniquement le fichier exe dans le dossier eclipse.

Vérification

Créez un nouveau projet Java, ouvrez les paramètres du chemin de construction et sélectionnez JUnit dans Ajouter une bibliothèque. Si le plug-in a été correctement exporté et installé, JUnit 5 doit avoir été ajouté aux choix de boîte de dialogue qui apparaissent ici.

ju5_12.png

Vous êtes maintenant prêt à développer JUnit 5 sur Eclipse.


Profitez de JUnit 5

Maintenant, écrivons le code JUnit 5 et exécutons-le. Cette fois, j'écrirai le code pour essayer la nouvelle assertion de groupe de fonctions de JUnit 5.

JUnit_5_Example


import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;

public class BaseTest {

	@Test
	public void test() {
		Assertions.assertEquals(Integer.valueOf(1).toString(), "1");
		Assertions.assertAll(
				() -> Assertions.assertEquals(Integer.valueOf(1).toString(), "1"),
				() -> Assertions.assertEquals(Integer.valueOf(1).toString(), "2"),
				() -> Assertions.assertEquals(Integer.valueOf(3).toString(), "3"),
				() -> System.out.println("Hello JUnit5!")
				);
	}
}

Cela fonctionne de la même manière que jusqu'à JUnit 4.

ju5_13.png

Oui, le test échoue car la deuxième assertion échoue. Ce à quoi vous devez faire attention ici, c'est que "Hello JUnit 5!" Est sorti sur la console. Dans JUnit traditionnel, si une assertion échoue dans une seule méthode de test, aucun autre traitement n'est effectué. Dans l'assertion de groupe JUnit 5, le traitement au sein de ce groupe est toujours exécuté.

Vous avez maintenant confirmé que le plug-in JUnit 5 que vous avez exporté cette fois fonctionne correctement. Cela a pris environ 3 heures jusqu'à présent.


Résumé

C'est encore assez compliqué, donc si vous voulez intégrer JUnit 5 dans votre projet pour les entreprises, attendez qu'Eclipse prenne officiellement en charge JUnit 5 ou utilisez IntelliJ, à moins que vous n'ayez une bonne raison de le faire ...

Il est également préférable de l'utiliser via le plug-in Gradle ou Maven.


référence

JUnit 5 User Guide http://junit.org/junit5/docs/current/user-guide/

Session Eclipse Converge 2017 "Embracing JUnit 5 with Eclipse"

Exemple de projet JUnit 5 dans Gradle

https://github.com/junit-team/junit5-samples/tree/r5.0.0-M4/junit5-gradle-consumer

Exemple de projet JUnit 5 à Maven

https://github.com/junit-team/junit5-samples/tree/r5.0.0-M4/junit5-maven-consumer

Recommended Posts

Profitez de JUnit 5 avec Eclipse avant la sortie officielle
Comment exécuter JUnit dans Eclipse
[Pour les débutants] J'ai essayé d'utiliser JUnit 5 avec Eclipse
MVC dans Eclipse.
Refactoring dans JUnit
JUnit 5 devient java.lang.NoClassDefFoundError: org / junit / platform / engine / EngineDiscoveryListener dans Eclipse
Pour déboguer avec Eclipse