![](/img/trans.png)
[英]Visual Studio 2010 Professional - Problem Unit-Testing Web Services
[英]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 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.