Checkstyle java

Signaler
-
 Bolaaro -
Bonjour,
J'ai un devoir qui consiste a corriger un code afin qu'il passe le checkstyle. Il y a deux erreurs que je n'arrive pas a corriger:
-Ligne 1:Package Names: Le nom 'Devoir2' n'est pas conforme à l'expression '^[a-z]+(\.[a-zA-Z_][a-zA-Z0-9_]*)*$'.
-Ligne 5:Les classes utilitaires ne doivent pas avoir de constructeur par défaut ou public.

package Devoir2;
/**
* Ma class devoir.
*/
public class Calcul {
    /**
     * Calcul la somme de deux nombres.
     * @param a est un final int
     * @param b est un final int
     * @return a+b
     */
    public static int somme(final int a, final int b) {
        return a + b;
        }
    /**
     * @param a est un final int
     * @param b est un final int
     * @return a/b si b>=10 sinon b
     */
    public static int maFonction(final int a, final int b) {
        final int c = 10;
        if (b >= c) {
            return a / b;
            }
        return b;
        }
    /**
     * @param a est un final int
     * @param b est un final int
     * @return a / b si b != 0
     * @throw IllegalArgumentException si b == 0
     */
    public static int division(final int a, final int b) {
        if (b == 0) {
            throw new IllegalArgumentException("b ne doit pas etre 0");
        }
        return a / b;
    }
}


Configuration: Windows / Chrome 77.0.3865.120

1 réponse

Messages postés
16116
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
24 février 2020
2 539
Bonjour,

Tu devrais t'aider des messages d'erreurs, ils sont là pour t'indiquer ce qui ne va pas.

-Ligne 1:Package Names: Le nom 'Devoir2' n'est pas conforme à l'expression '^[a-z]+(\.[a-zA-Z_][a-zA-Z0-9_]*)*$'.
Un package doit commencer par une minuscule.

-Ligne 5:Les classes utilitaires ne doivent pas avoir de constructeur par défaut ou public.
Ajoutes un constructeur privé.
Merci, je m'en suis finalement sorti mais j'ai un autre probleme. Les tests marchent bien sur eclipse mais ne marchent pas sur ligne de commande maven.
Voici les tests:
import org.junit.Rule;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.junit.rules.ExpectedException;


class CalculTest {

    @Rule
    public ExpectedException thrown = ExpectedException.none();
    /** test du constructeur. **/

  @Test
  public void testConstructeur() {
    new Calcul();
  }

  /** test de la methode somme. **/
  @Test
  public void testSomme() {
    Assertions.assertEquals(5, Calcul.somme(3, 2));
  }

  /** test de la methode division. **/
  @Test
  public void testDivision() {
   Assertions.assertEquals(4, Calcul.division(8, 2));
  }

  @Test
  public void testMafonction_b_plusPetit10() {
    Assertions.assertEquals(7, Calcul.maFonction(12, 7));
  }

  @Test
  public void testMafonction_b_NonPlusPetit10() {
   Assertions.assertEquals(2, Calcul.maFonction(24, 12));
  }

  @Test
  public void should_throw_exception_when_divide_bt_zero() {
      thrown.expect(IllegalArgumentException.class);
      thrown.expectMessage("b ne doit pas etre 0");
      Assertions.assertEquals(4, Calcul.division(8, 0));
}
}



et voici le pom
<?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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <name>MyProject</name>
  <description>Mon nouveau projet</description>
  <version>1.1</version>
  <groupId>default</groupId>
  <artifactId>my-project</artifactId>

  <dependencies><!-- dependendance du projet -->
    <!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter -->
<dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-engine</artifactId>
        <version>5.3.1</version>
        <scope>test</scope>
    </dependency>
  </dependencies>

  <build>
    <plugins><!-- lister les plugins et leur version permet d'eviter que maven prenne celui qui trouvera par defaut -->

    <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.8.0</version>
    <configuration>
    <release>7</release>
    </configuration>
	</plugin>

      <plugin>
	<artifactId>maven-project-info-reports-plugin</artifactId>
          <version>3.0.0</version>
      </plugin>

      <plugin><!-- pour l'execution des tests -->
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-surefire-plugin</artifactId>
	<version>3.0.0-M3</version>
	<configuration>
<testFailureIgnore>true</testFailureIgnore>
</configuration>
      </plugin>
      
      <plugin><!-- pour la generation de rapports -->
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-site-plugin</artifactId>
        <version>3.7.1</version>
        <configuration>
          <locales>fr,en</locales><!-- en francais par defaut -->
        </configuration>
      </plugin>

      <plugin><!-- pour la couverture de code avec JaCoco lors de l'exécution des tests JUnit -->
	<groupId>org.jacoco</groupId>
	<artifactId>jacoco-maven-plugin</artifactId>
	<version>0.8.4</version>
	<executions>
          <execution>
            <goals>
              <goal>prepare-agent</goal>
            </goals>
          </execution>
          <execution>
            <id>report</id>
            <phase>prepare-package</phase>
            <goals>
              <goal>report</goal>
            </goals>
          </execution>
	</executions>
      </plugin>


      <plugin><!-- pour l'analyse avec checkstyle -->
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-checkstyle-plugin</artifactId>
	<version>3.0.0</version>
      </plugin>

    </plugins>
  </build>

  <reporting><!-- on indique ici les rapports qu'on veut obtenir lors de la phase de generation de rapports -->
    <plugins>
      <plugin>
        <groupId>org.jacoco</groupId>
        <artifactId>jacoco-maven-plugin</artifactId>
        <reportSets>
          <reportSet>
            <reports>
              <report>report</report>
            </reports>
          </reportSet>
        </reportSets>
      </plugin>


      <plugin><!-- pour avoir le rapport checkstyle -->
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-checkstyle-plugin</artifactId>
        <version>3.0.0</version>
        <reportSets>
          <reportSet>
            <reports>
              <report>checkstyle</report>
            </reports>
          </reportSet>
        </reportSets>
      </plugin>

      <plugin><!-- pour avoir le lien au code source dans les rapports -->
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jxr-plugin</artifactId>
        <version>2.3</version>
      </plugin>
      
      <plugin><!-- pour la verification du code avec PMD -->
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-pmd-plugin</artifactId>
        <version>3.12.0</version>
      </plugin>

      <plugin><!-- pour avoir le rapport surfire (execution des tests) -->
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-report-plugin</artifactId>
        <version>3.0.0-M3</version>
      </plugin>

    </plugins>
  </reporting>

  <properties>
    <!-- encodage du code source -->
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

</project>

Il m'envoie une erreur en disant que le package org.junit doesn't exist
KX
Messages postés
16116
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
24 février 2020
2 539 > Bolaaro24
Dans quel répertoire as tu mis ta classe de tests ?
Ils devraient être dans src/test/java, car le <scope>test</scope> ne s'applique pas au src/main/java
De plus je t'invite à ajouter à chaque classe un nom de package commençant par ton groupId et à mettre ta classe de test public.
KX
Messages postés
16116
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
24 février 2020
2 539
Remarque : le test du constructeur est absurde, cela montre bien que tu n'as pas compris pourquoi "Les classes utilitaires ne doivent pas avoir de constructeur par défaut ou public." (ce qui était ta question initiale)

Voici le genre de test que tu devrais avoir pour vérifier les constructeurs d'une classe utilitaire :
@ParameterizedTest
@MethodSource("getDeclaredConstructors")
public void testConstructorModifier(final Constructor<?> constructor) {
    Assertions.assertTrue(Modifier.isPrivate(constructor.getModifiers()),
        () -> constructor + " should be private");
}

private static Constructor<?>[] getDeclaredConstructors() {
    return Calcul.class.getDeclaredConstructors();
}
La classe de tests se trouve effectivement dans src/test/java.
Du coup, je vais enlever le test du constructeur et voir ce que ça va donner.