Faire test unitaire
Résolu/Fermé
jun_1393
Messages postés
28
Date d'inscription
jeudi 26 septembre 2019
Statut
Membre
Dernière intervention
2 juin 2020
-
21 mai 2020 à 01:23
jun_1393 Messages postés 28 Date d'inscription jeudi 26 septembre 2019 Statut Membre Dernière intervention 2 juin 2020 - 22 mai 2020 à 02:12
jun_1393 Messages postés 28 Date d'inscription jeudi 26 septembre 2019 Statut Membre Dernière intervention 2 juin 2020 - 22 mai 2020 à 02:12
A voir également:
- Faire test unitaire
- Test performance pc - Guide
- Test composant pc - Guide
- Test ram - Guide
- Test vitesse ssd - Guide
- Test hdd - Télécharger - Informations & Diagnostic
2 réponses
KX
Messages postés
16733
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
31 janvier 2024
3 015
Modifié le 21 mai 2020 à 13:55
Modifié le 21 mai 2020 à 13:55
Bonjour,
Cannot resolve method 'calculeTaxe' in 'CremeGlacee.
En effet, la méthode "calculeTaxe" n'existe pas, en tout cas pas avec ce nom là, il y a un "e" en trop pour correspondre à la méthode "calculTaxe" de AbstractProduit.
Je ne sais pas ce que tu utilises comme éditeur pour écrire ton code, mais sur Eclipse (par exemple) en survolant l'erreur tu aurais des suggestions de correction, la première d'entre elle étant la bonne (pour cette erreur).
Remarque : dans tes classes de tests tu n'as aucune assertions, cela ne sert donc à rien, il faut que tu contrôles le résultat du code avec les résultats théoriques attendus. Exemple :
Ce test est correct, il échouera cependant car le code est faux, je te laisse le corriger, voici le message obtenu :
Cannot resolve method 'calculeTaxe' in 'CremeGlacee.
En effet, la méthode "calculeTaxe" n'existe pas, en tout cas pas avec ce nom là, il y a un "e" en trop pour correspondre à la méthode "calculTaxe" de AbstractProduit.
Je ne sais pas ce que tu utilises comme éditeur pour écrire ton code, mais sur Eclipse (par exemple) en survolant l'erreur tu aurais des suggestions de correction, la première d'entre elle étant la bonne (pour cette erreur).
Remarque : dans tes classes de tests tu n'as aucune assertions, cela ne sert donc à rien, il faut que tu contrôles le résultat du code avec les résultats théoriques attendus. Exemple :
@Test public void calculTaxe() { AbstractProduit produit = new AbstractProduit("test", 42) { @Override public void prepare(List<String> ingredients) { } }; Assertions.assertAll("Tests avec un produit dont le prix est 42", () -> { AssertionError e = Assertions.assertThrows(AssertionError.class, () -> produit.calculTaxe(-1), "Les taux négatifs devraient être interdits"); Assertions.assertEquals("taux negatif inferieur à zero", e.getMessage(), "Un message devrait être indiqué pour les taux négatifs"); }, () -> { AssertionError e = Assertions.assertThrows(AssertionError.class, () -> produit.calculTaxe(0), "Les taux nuls devraient être interdits"); Assertions.assertEquals("taux zero", e.getMessage(), "Un message devrait être indiqué pour les taux nuls"); }, () -> { AssertionError e = Assertions.assertThrows(AssertionError.class, () -> produit.calculTaxe(101), "Les taux supérieurs à 100 devraient être interdits"); Assertions.assertEquals("taux superieur à 100", e.getMessage(), "Un message devrait être indiqué pour les taux supérieurs à 100"); }, () -> Assertions.assertEquals(0.42, produit.calculTaxe(1), "1% de 42 devrait donner 0.42"), () -> Assertions.assertEquals(4.2, produit.calculTaxe(10), "10% de 42 devrait donner 4.2"), () -> Assertions.assertEquals(42, produit.calculTaxe(100), "100% de 42 devrait donner 42")); }
Ce test est correct, il échouera cependant car le code est faux, je te laisse le corriger, voici le message obtenu :
MultipleFailuresError: Tests avec un produit dont le prix est 42 (2 failures) AssertionFailedError: 1% de 42 devrait donner 0.42 ==> expected: <0.42> but was: <0.0> AssertionFailedError: 10% de 42 devrait donner 4.2 ==> expected: <4.2> but was: <0.0>
jun_1393
Messages postés
28
Date d'inscription
jeudi 26 septembre 2019
Statut
Membre
Dernière intervention
2 juin 2020
21 mai 2020 à 08:52
21 mai 2020 à 08:52
mon code est complet maintenant cependant il y a des bugs pour les tests AbstractProduit.calculeTaxe() et CremeGlacee.toString() j'ai cherché des heures et je trouve pas le bug mais sa affiche Cannot resolve method 'calculeTaxe' in 'CremeGlacee.
voici mon code actuel
classe abstraite
sa classe test
ma classe cremeglacé
voici mon code actuel
classe abstraite
import java.util.ArrayList; import java.util.List; public abstract class AbstractProduit { private String nomProduit; private float prix; protected List<String> ingredientsPermis; public AbstractProduit(String nomProduit, float prix) { ingredientsPermis = new ArrayList<>(); this.nomProduit = nomProduit; this.prix = prix; } public String getNomProduit() { return nomProduit; } public void setNomProduit(String nomProduit) { this.nomProduit = nomProduit; } public float getPrix() { return prix; } public void setPrix(float prix) { this.prix = prix; } /* * calcule la taxe avec le taux reçut comme parametre * @param taxePourcentage le taux de taxe à appliquer (ne peux etre negatif et superieur à 100) * @return le montant avec taxe appliqué */ public double calculTaxe(int taxePourcentage) { assert taxePourcentage <= 100 :"taux superieur à 100"; assert taxePourcentage >= 0 : "taux negatif inferieur à zero"; assert taxePourcentage != 0 :"taux zero"; //L'utilisateur doit passer un pourcentage de taxe positif et inférieur à 100. return prix * (taxePourcentage / 100); } @Override public boolean equals(Object o){ if (this == o) return true; if (o ==null || getClass() !=o.getClass()) return false; AbstractProduit that = (AbstractProduit) o; return nomProduit.equals(that.nomProduit); } @Override public int hashCode() { return nomProduit.hashCode(); } @Override public String toString() { return nomProduit + " coutant " + prix + "$"; } public abstract void prepare(List<String> ingredients); //Pour les tests public List<String> getIngredientsPermis() { return ingredientsPermis; } }
sa classe test
class AbstractProduitTest { CremeGlacee cg = new CremeGlacee(3.0f, CremeGlacee.Saveur.CHOCOLAT); @BeforeEach void setUp() { CremeGlacee cg = new CremeGlacee(3.0f, CremeGlacee.Saveur.CHOCOLAT); } @Disabled void prepare() { fail("methode à venir"); } @Test void testCalculTaxe() { try{ cg.calculeTaxe(15); }catch (AssertionError ae) { ae.getStackTrace(); } } @Disabled @Test void testPrepare() { fail("methode à venir"); } }
ma classe cremeglacé
public class CremeGlacee extends AbstractProduit { public enum Saveur {VANILLE, PISTACHE, CHOCOLAT} private Saveur saveur; public CremeGlacee(float prix, Saveur saveur) { super("cr�me glac�e", prix); this.ingredientsPermis.addAll(Arrays.asList("CREME", "SUCRE", "OEUF", "VANILLE", "PISTACHE", "CHOCOLAT")); this.saveur = saveur; } @Override public void prepare(List<String> ingredients) { // NOP } static boolean estMajuscule(char ch){ int ascii = (int) ch; //[A..Z] if((ascii>=65 && ascii<=90) //les lettres accentuées || (ascii>=192 && ascii<=223)) return true; return false; } /** * verifie que les ingredient enté sont permit * @param ingredient les ingredients avec lesquelles on va comparé avec ingredientPermis pour savoir si il sont permit ( ils doivent etre en majuscule) * @return vrai si l'ingredient est permis */ public boolean valideIngredient(String ingredient) { boolean retVal = false; // ingredient pas null et non vide (pas de "") // IMPORTANT :les noms d'ingrédients tout en majuscule assert ingredient != null: "est null"; assert ingredient != "": "est null"; // assert estMajuscule(ch ) =false: "est miniscule"; //On cherche si l'ingrédient recu en paramètre est permis if (ingredientsPermis.contains(ingredient)) { retVal = true; } return retVal; } // il y avait une erreur ici // prend le toString de son parent abstract // le super devait etre placé pres return @Override public String toString() { return super.toString() +" à saveur de " + saveur; } } sa classe test <code java> class CremeGlaceeTest { CremeGlacee cg = new CremeGlacee(3.0f, CremeGlacee.Saveur.CHOCOLAT); @BeforeEach void setUp() { CremeGlacee cg = new CremeGlacee(3.0f, CremeGlacee.Saveur.CHOCOLAT); } @Test void testToString() { String test =" créme glacée coutant 3.0$ à saveur de Chocolat"; if (!(cg.toString().equals(test))){ fail(); } } @Disabled @Test void prepare() { fail("methode à venir"); } @Disabled @Test void valideIngredient() { fail("methode à venir"); } }
22 mai 2020 à 02:12
pour le toString j'Ai utilisé un try catch et le problème à été réglé