簡體   English   中英

C#Visual Studio中的單元測試

[英]Unit-testing in 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已通過測試,但我無法通過任何其他測試。 有任何想法嗎? 有沒有必要測試構造函數? 感謝幫助。

您的代碼sides.Distinct<double>().Count(); 返回超過1。

看看這個線程,

與LINQ to Objects不兼容的區別

對於自定義對象,LINQ Distinct不是那么聰明。

它所做的只是查看您的列表,並看到它具有兩個不同的對象(它不在乎它們的成員字段具有相同的值)。

如鏈接所示,您可以實現IEquatable

斜角三角形的三個邊都不相等 isScalene的代碼應為:

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

另外, isEquilateral的代碼是錯誤的。 等邊三角形具有三個相等的邊,因此等邊三角形的uniqueSides的返回uniqueSides應為1 Vice 3。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM