[JAVA] Utilisez @ValueSource de ParametrisedTest de JUnit5

Aperçu

Cette entrée décrit comment utiliser "@ValueSource" de "Parametrised Test" qui facilite l'écriture d'un test avec différents paramètres lors de l'écriture d'un test unitaire dans JUnit5.

Ceci est la deuxième entrée du Calendrier de l'Avent 2019 pour créer une calculatrice d'entreprise.

Lecteur supposé

Test paramétré JUnit 5

JUnit5 est un framework de test qui est une refonte majeure de JUnit4. Certaines fonctionnalités ont été complètement supprimées, tandis que d'autres ont été ajoutées.

Parmi les fonctions nouvellement ajoutées se trouve "Tests paramétrés". Cela vous aide à écrire facilement un test en transmettant divers types de valeurs aux arguments d'un cas de test en tant que paramètres.

Préparation

Selon la documentation, l'artefact "junit-jupiter-params" doit être disponible pour exécuter des tests paramétrés. Cette entrée utilise SpringBoot et utilise spring-boot-starter-test pour les tests, mais dans ce cas spring-boot Juste en écrivant une ligne de -starter-test, la dépendance à junit-jupiter-params est également spécifiée.

Les spécifications suivantes sont entrées dans build.gradle. Avec SpringInitializr, il a également spécifié que "junit-vintage-engine", qui prend en charge l'exécution de tests écrits en JUnit3 et Junit4, ne doit pas être utilisé.

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter'
	testImplementation('org.springframework.boot:spring-boot-starter-test') {
		exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
	}

Ecrire un test avec @ValueSource

Lors de l'écriture de JUnit, j'utilise "AssertJ" pour vérifier les résultats car j'aime la lisibilité. La ligne suivante est ajoutée à build.gradle.

	testImplementation group: 'org.assertj', name: 'assertj-core', version: '3.14.0'

Vous trouverez ci-dessous un exemple de source à tester avec ValueSource.


    @ParameterizedTest
    @ValueSource(chars = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'})
    public void push_single_success(char c) {
        DeskCalculator dc = new DeskCalculator();
        dc.pushChar(c);
        assertThat(dc.getCurrentValue()).isEqualTo(new BigDecimal(new String(new char[]{c})));
    }

La méthode "pushChar" de la classe DeskCalculator ciblée dans ce test a les fonctions suivantes.

  1. Entrez le caractère indiquant la valeur numérique ("0-9" et ".") Et conservez-le dans le tampon interne.
  2. Ignorez tout le reste
  3. Conservez le tampon numérique interne sous forme de chaîne dans l'instance. Lorsque la valeur est demandée de l'extérieur, elle est renvoyée par Big Decimal.

Les résultats de l'exécution du test sont indiqués dans la figure ci-dessous. Il a été testé pour 10 pièces.

コメント 2019-12-11 081737.png

J'ai testé les chiffres ci-dessus, mais j'écrirai également le test suivant pour voir le deuxième comportement.

    @ParameterizedTest
    @ValueSource(chars = {'+', '-', '*', '/', 'A', '!', ' '})
    public void push_single_invalid_char_success(char c) {
        DeskCalculator dc = new DeskCalculator();
        dc.pushChar(c);
        assertThat(dc.getCurrentValue()).isEqualTo(BigDecimal.ZERO);
    }

Comme mentionné dans les deux exemples ci-dessus, en passant plusieurs paramètres à la partie @ValueSource, des tests pour plusieurs valeurs seront exécutés.

en conclusion

Dans cette entrée, nous avons couvert le "Test paramétré" qui a été ajouté dans JUnit 5. En plus de @ValueSource, ParametrisedTest fournit également une fonction pour passer plusieurs arguments et une fonction pour lire une valeur à partir de CSV.

Le code utilisé dans cette entrée est balisé et stocké sur GitHub. https://github.com/hrkt/commandline-calculator/releases/tag/0.0.3

Recommended Posts

Utilisez @ValueSource de ParametrisedTest de JUnit5
Utilisation de la classe Date
Comment utiliser JUnit (débutant)
[Création] Comment utiliser JUnit
utiliser enum au lieu de la constante int
Utilisez redirect_to et effectuez un rendu correctement
Comment utiliser setDefaultCloseOperation () de JFrame
Utilisation correcte de Mockito et PowerMock
Votre utilisation de JobScheduler est incorrecte