4 votes

J Test unitaire pour la multiplication en Java

public static int multiply(int a, int b) {
    int product = a * b;
    return product;
}

J'essaie d'écrire un test J Unit pour ce code. Pour l'instant, il passe, mais je ne suis pas tout à fait sûr de l'avoir bien compris. Je ne suis pas non plus certain que le code soit correct au départ. Le code est supposé prendre deux nombres rationnels comme paramètres et retourner un nombre rationnel comme produit.

@Test   
public void multiplyTest() {        
    int product = Rational.multiply(5/7,2/3);       
    assertEquals(product, Rational.multiply(5/7, 2/3));     
}

Mise à jour

Voici ma classe Rational avec mon code réel :

public class Rational {

    private int num;
    private int den;

    public Rational(int numIn, int denIn) {
        num = numIn;
        den = denIn;

    }

    public int getNum() {
        return num;
    }

    public int getDen() {
        return den;
    }

    public String toString() {
        return num + "/" + den;
    }

    public String reciprocal() {
        return den + "/" + num;
    }

    public static int multiply(int a, int b) {
        int product = a * b;
        return product;
    }

    public int divide(int a) {
        int number = num / den;
        return number / a;
    }

    public int add(int number) {
        int sum = ((this.num * den) + (num * this.den)) / (this.den * den);
        return sum;
    }

}

3voto

Spyros K Points 309

La solution n'est pas correcte, pas plus que le test.

Votre méthode prend en entrée deux entiers et renvoie un entier. Vous devez créer une classe Rational avec des champs nominateur et dénominateur. Utilisez-la comme type d'arguments et type de retour.

Vous devez également communiquer le résultat au test qui a lieu le 21/10 et qui déterminera si la méthode testée permet d'obtenir le résultat correct. L'unité donnée utilise la même méthode pour calculer deux fois la même chose et vérifie ensuite que les résultats sont les mêmes. Ils sont bien sûr identiques, mais cela ne prouve rien.

Mise à jour

Sur la base de votre mise à jour, je vous propose une version actualisée de votre classe Rational. Des changements similaires peuvent être apportés aux autres méthodes. Notez qu'il serait préférable que reciprocal renvoie un rationnel afin que le programmeur puisse également l'utiliser. Vous pouvez toujours l'imprimer en écrivant rational.reciprocal() como toString sera automatiquement appelé, par exemple dans System.out.println(rational.reciprocal());

public class Rational {

    private final int num;
    private final int den; 

    public Rational(int numIn, int denIn) {
        num = numIn;
        den = denIn;

    }

    public int getNum() {
        return num;
    }

    public int getDen() {
        return den;
    }

    public String toString() {
        return num + "/" + den;
    }

    public Rational reciprocal() {
        return new Rational(den,num);
    }

    public static Rational multiply(Rational a, Rational b) {
        return new Rational(a.num * b.num , a.den * b.den );
    }

    public Rational divide(int a) {
        return new Rational(this.num,a*this.den);
    }

}

0voto

Robert Points 230

Votre code ne fait qu'appeler deux fois le code testé. Cela permettrait de tester que multiply est idempotent (au moins lorsqu'il est appelé deux fois). Il ne vérifie pas qu'il multiplie effectivement ses paramètres. S'il se contentait de les additionner et de renvoyer la somme, votre test ne le remarquerait pas (c'est-à-dire qu'il échouerait).

Votre test est également assez compliqué ; pourquoi cette division dans le code ?

Faites plutôt quelque chose comme ceci :

@Test
public void multiplyInts() {        
    assertEquals(Integer.valueOf(35), Rational.multiply(5, 7));     
}

Répétez l'opération avec real ou long, si cela est important pour votre code à tester.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X