2012-11-28 7 views
-1

저는이 클래스에 대한 단위 테스트를하고 있습니다. 삼각형 클래스는 측면을 가져 와서 삼각형이 스켈레톤, 이등변 삼각형 또는 등변점인지 결정합니다.C# Visual Studio의 단위 테스트

public struct Point 
{ 
    public int x, y; 

    public Point(int a, int b) 
    { 
     x = a; 
     y = b; 
    } 
} 

public class Triangle 
{ 
    double[] sides; 

    public Triangle(double a, double b, double c) 
    { 
     if ((a <= 0) || (b <= 0) || (c <= 0)) 
     { 
      throw new ArgumentException(" "); 
     } 
     sides = new double[] { a, b, c }; 
    } 

    public Triangle(double[] s) 
    { 
     sides = new double[s.Length]; 
     for (int i = 0; i < s.Length; i++) 
      sides[i] = s[i]; 
    } 

    public Triangle(Point a, Point b, Point c) 
    { 
     sides = new double[3]; 
     sides[0] = Math.Sqrt(Math.Pow((double)(b.x - a.x), 2.0) + Math.Pow((double)(b.y - a.y), 2.0)); 
     sides[1] = Math.Sqrt(Math.Pow((double)(b.x - c.x), 2.0) + Math.Pow((double)(b.x - a.x), 2.0)); 
     sides[2] = Math.Sqrt(Math.Pow((double)(c.x - a.x), 2.0) + Math.Pow((double)(c.x - a.x), 2.0)); 
    } 

    public Triangle(Point[] s) 
    { 
     sides = new double[s.Length]; 
     sides[0] = Math.Sqrt(Math.Pow((double)(s[1].x - s[0].x), 2.0) + Math.Pow((double)(s[1].y - s[0].y), 2.0)); 
     sides[1] = Math.Sqrt(Math.Pow((double)(s[1].x - s[2].x), 2.0) + Math.Pow((double)(s[1].x - s[2].x), 2.0)); 
     sides[2] = Math.Sqrt(Math.Pow((double)(s[2].x - s[0].x), 2.0) + Math.Pow((double)(s[2].x - s[0].x), 2.0)); 
    } 

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

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

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

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

}

isScaleneTest이 실패하고, 그 이유를 알아낼 수 없습니다?

[TestMethod()] 
    public void isScaleneTest() 
    { 
     Triangle target = new Triangle(1.2, 2.1, 7.1); 
     Assert.IsTrue(target.isScalene()); 
    } 

다른 방법을 테스트하는 방법도 문제가 있습니다. isEquilateral와 isIsosceles는 테스트를 거쳐 통과하지만 다른 테스트는 통과 할 수 없습니다. 어떤 아이디어? 생성자를 테스트 할 시점이 있습니까? 도와 주셔서 감사합니다. 이 사용자 정의 객체에 관해서

+3

디버거를 사용하여 테스트를 수행 했습니까? –

+0

단위 테스트와 연결되어 있지 않지만 생성자에 전달 된 세 개의 길이는 삼각형이 아닙니다. 어떤 양측의 합은 세 번째 삼각형보다 많아야합니다. – SWeko

답변

1

을 구현할 수 부등변 삼각형은 모든 불평등 세 가지 측면을 가지고있다. isScalene의 코드는 다음과 같아야합니다

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

또한, 대한 코드가 isEquilateral 잘못이다. 정삼각형은 이 같으며면이 있으므로 정사각형의 경우 uniqueSides은 1이됩니다. 3

+0

물론! 감사! – ana

1

에 코드를 sides.Distinct<double>().Count();

Distinct not working with LINQ to Objects

LINQ 고유

가 똑똑하지,

이상 1.이 스레드에서보세요 반환합니다.

모든 것은 목록을보고 두 개의 서로 다른 개체를 가지고 있습니다 (개체가 동일한 값을 갖고 있어도 상관하지 않음). 필드. 링크에 나타낸 바와 같이

, 당신은 IEquatable

+0

그의 "Distinct"사용은 사용자 정의 객체의'double'과 같습니다. 그의 경우에는 'double'에 대한 기본 동일성 비교자를 사용합니다. 여전히 문제를 일으킬 수는 있지만 지금은 통과하지 못하는 테스트는 스켈레톤 삼각형 테스트 방법 때문입니다. –

+0

-1. 뚜렷한 차이는 두 배로 충분하다. (어쨌든'double'의 IEquatable을 구현하는 것이 불가능하다.) 문제는 Scalene과 Equilateral의 정의에있다. – SWeko

관련 문제