-1

私は、このクラスの単体テストを作成しています。これは、辺を取り、三角形が不等辺、二等辺三角形、または等辺三角形であるかどうかを判断する三角形クラスです。

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 はテストされて合格しましたが、他のテストに合格することはできません。何か案は?コンストラクターをテストする意味はありますか? 手伝ってくれてありがとう。

4

2 に答える 2

1

あなたのコードsides.Distinct<double>().Count();は1つ以上を返しています。

このスレッドを見てください、

LINQtoObjectsで動作しないこと

LINQ Distinctは、カスタムオブジェクトに関してはそれほど賢くはありません。

リストを見て、2つの異なるオブジェクトがあることを確認するだけです(メンバーフィールドの値が同じであってもかまいません)。

リンクに示されているように、IEquatableを実装できます

于 2012-11-28T12:30:57.607 に答える
1

不等辺三角形には、すべて等しくない3 つの辺があります。のコードは次のisScaleneようになります。

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

また、 is のコードisEquilateralが間違っています。正三角形には 3 つの等しいuniqueSides辺があるため、正三角形のリターンは1 対 3 になります。

于 2012-11-28T12:36:41.443 に答える