[JAVA] Vérifiez le comportement lorsque l'exception spécifiée par attendu dans l'annotation JUnit 4 @Test se produit ou ne se produit pas.

Aperçu

À propos de l'annotation @Test attendue

L'annotation @Test attendue rend le test réussi lorsque l'exception spécifiée est levée. Le test échoue si l'exception spécifiée n'est pas levée.

Test (JUnit API)

Optionally specify expected, a Throwable, to cause a test method to succeed if and only if an exception of the specified class is thrown by the method. If the Throwable's message or one of its properties should be verified, the ExpectedException rule can be used instead.

Exemple de programme

Liste des codes sources

├── pom.xml
└── src
    ├── main
    │   └── java
    │       └── com
    │           └── example
    │               └── Calculator.java
    └── test
        └── java
            └── com
                └── example
                    └── CalculatorTest.java

Fichier de construction Maven pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.example</groupId>
  <artifactId>test</artifactId>
  <version>1.0-SNAPSHOT</version>

  <properties>
    <maven.compiler.source>11</maven.compiler.source>
    <maven.compiler.target>11</maven.compiler.target>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
    <!-- https://mvnrepository.com/artifact/junit/junit -->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

</project>

Calculator.java

Reportez-vous à l'exemple de classe présenté dans Getting started · junit \ -team / junit4 Wiki · GitHub.

package com.example;

public class Calculator {
  public int evaluate(String expression) {
    int sum = 0;
    for (String summand : expression.split("\\+"))
      sum += Integer.valueOf(summand);
    return sum;
  }
}

CalculatorTest.java

Une classe de test pour la classe Calculator.

package com.example;

import static org.junit.Assert.assertEquals;

import org.junit.Test;

public class CalculatorTest {

  // "1+2+3"Si 6 est renvoyé, le test est réussi.
  @Test
  public void testEvaluate() {
    Calculator calculator = new Calculator();
    int sum = calculator.evaluate("1+2+3");
    assertEquals(6, sum);
  }

  //Test réussi si NullPointerException se produit
  @Test(expected = NullPointerException.class)
  public void testEvaluateException() {
    Calculator calculator = new Calculator();
    int sum = calculator.evaluate(null);
  }

  //Test réussi si NullPointerException se produit
  // (Le test échoue car il ne se produit pas cette fois)
  @Test(expected = NullPointerException.class)
  public void testEvaluateFailed() {
    Calculator calculator = new Calculator();
    int sum = calculator.evaluate("1+2+3");
  }
}

Lancer le test

Exécutez le test avec la commande mvn test.

$ mvn test
(Omission)
-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running com.example.CalculatorTest
Tests run: 3, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 0.116 sec <<< FAILURE!
testEvaluateFailed(com.example.CalculatorTest)  Time elapsed: 0.017 sec  <<< FAILURE!
java.lang.AssertionError: Expected exception: java.lang.NullPointerException
(Omission)

Results :

Failed tests:   testEvaluateFailed(com.example.CalculatorTest): Expected exception: java.lang.NullPointerException

Tests run: 3, Failures: 1, Errors: 0, Skipped: 0

Vous pouvez voir que le test de la méthode testEvaluateFailed de la classe CalculatorTest a échoué. J'ai écrit "@Test (attendu = NullPointerException.class)", mais NullPointerException ne s'est pas produit.

Matériel de référence

Recommended Posts

Vérifiez le comportement lorsque l'exception spécifiée par attendu dans l'annotation JUnit 4 @Test se produit ou ne se produit pas.
Comment définir quand "Le constructeur Empty () n'est pas visible" se produit dans junit
Dans la boîte de dialogue d'avertissement lors du démarrage de l'applet, la vérification de "Ne pas afficher de la prochaine fois" ne fonctionne pas
[JUnit] Tester l'exception levée