2012-01-06 5 views
0

Je travaille sur un laboratoire pratique avec des tests unitaires. Ci-dessous l'application que je suis en train de tester (je teste toutes les méthodes et le constructeur). Tous mes tests sont complets, acceptons-en un, c'est-à-dire tester une méthode appelée "isScalene()", qui vérifie si le triangle est scalène (tous les côtés sont uniques) ou non.Échec de la méthode de test (test unitaire en VS)

Vous trouvez la méthode de test qui échoue en bas. Quand je change "equalateral" en True et "scalene" en False, ça passe. Quelque chose ne va pas dans l'application, mais je ne peux pas comprendre ce qu'il est (probablement dans « uniqueSides() bien).

Je vous serais reconnaissant si quelqu'un pouvait me aider!

public class Triangle { 
    double[] sides; 

    public Triangle(double a, double b, double c) { 
     if ((a <= 0) || (b <= 0) || (c <= 0)){ 
      throw new ArgumentOutOfRangeException("Sidorna måste vara större än 0."); 
     } 
    sides = new double[] { a, b, c }; 
    } 

    private int uniqueSides() { 
    return sides.Distinct<double>().Count(); 
    } 

    public bool isScalene() { 
     if (uniqueSides() == 1){ 
      return true; 
     } 
     else{ 
      return false; 
     } 
    } 

    public bool isEquilateral() { 
     if (uniqueSides() == 3){ 
      return true; 
     } 
     else{ 
      return false; 
     } 
    } 

    public bool isIsosceles() { 
     if (uniqueSides() == 2){ 
      return true; 
     } 
     else{ 
      return false; 
     } 
    } 
} 

...

[TestMethod()] 
    public void isScalene3Test3() 
    { 
     Triangle triangle = new Triangle(25, 250, 2000); 

     var isosceles = triangle.isIsosceles(); 
     var equalateral = triangle.isEquilateral(); 
     var scalene = triangle.isScalene(); 

     Assert.IsFalse(isosceles, "Test Isosceles"); 
     Assert.IsFalse(equalateral, "Test Equalateral"); 
     Assert.IsTrue(scalene, "Test Scalene"); 
    } 

Répondre

5

isEquilateral devrait utiliser 1 côté unique et isScalene devrait utiliser 3.

public class Triangle { 
    double[] sides; 

    public Triangle(double a, double b, double c) { 
     if ((a <= 0) || (b <= 0) || (c <= 0)){ 
      throw new ArgumentOutOfRangeException("Sidorna måste vara större än 0."); 
     } 
    sides = new double[] { a, b, c }; 
    } 

    private int uniqueSides() { 
    return sides.Distinct<double>().Count(); 
    } 

    public bool isScalene() { 
     if (uniqueSides() == 3){ 
      return true; 
     } 
     else{ 
      return false; 
     } 
    } 

    public bool isEquilateral() { 
     if (uniqueSides() == 1){ 
      return true; 
     } 
     else{ 
      return false; 
     } 
    } 

    public bool isIsosceles() { 
     if (uniqueSides() == 2){ 
      return true; 
     } 
     else{ 
      return false; 
     } 
    } 
} 
+0

Oh, comment aurais-je pu être si aveugle? ;) Merci! :) – holyredbeard

+0

Je le fais tout le temps :) –

+0

@JasonCraig n'oubliez pas de marquer comme la réponse. –

0

Do pas vous voulez vérifier si (uniqueSides() == 3) plutôt que 1? Quoi qu'il en soit, le débogage du code vous aurait aidé à le découvrir très rapidement.