Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 单元测试在不应'时失败;不行_C#_Unit Testing - Fatal编程技术网

C# 单元测试在不应'时失败;不行

C# 单元测试在不应'时失败;不行,c#,unit-testing,C#,Unit Testing,我正在为一个应用程序进行单元测试,下面是一个单元测试,我不知道为什么它会失败 测试结果应该是“等腰线”为真,“等腰线”和“不等腰线”为假,Console.WriteLine显示它们实际上是真的,但由于某种奇怪的原因,测试失败了。我做错了什么?提前谢谢 我正在使用MSTest框架 public void isIsosceles() { Triangle triangle = new Triangle(2, 2, 5); var isosceles

我正在为一个应用程序进行单元测试,下面是一个单元测试,我不知道为什么它会失败

测试结果应该是“等腰线”为真,“等腰线”和“不等腰线”为假,Console.WriteLine显示它们实际上是真的,但由于某种奇怪的原因,测试失败了。我做错了什么?提前谢谢

我正在使用MSTest框架

    public void isIsosceles()
    {
        Triangle triangle = new Triangle(2, 2, 5);

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

        Console.WriteLine(isosceles);       // True
        Console.WriteLine(equalateral);     // False
        Console.WriteLine(scalene);         // False

        Assert.IsTrue(true, "Test Isosceles", isosceles);
        Assert.IsTrue(false, "Test Equalateral", equalateral);    // Fails, why?
        Assert.IsTrue(false, "Test Scalene", scalene);            // Fails, why?
    }

你打错电话了
IsTrue

第一个参数是要测试的布尔值:

Assert.IsFalse(equalateral, "Test Equalateral");    
您也可以调用
AreEqual

Assert.AreEqual(false, equalateral, "Test Equalateral")

使用assert语句是错误的。这是正确的:

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

Assert.IsTrue
检查第一个参数是否为true

您可能想要的是:

    Assert.IsTrue(isosceles, "Test Isosceles");
    Assert.IsFalse(equalateral, "Test Equalateral"); 
    Assert.IsFalse(scalene, "Test Scalene");     
但你的意思可能是:

    Assert.AreEqual(true, isosceles, "Test Isosceles");
    Assert.AreEqual(false, equalateral, "Test Equalateral");
    Assert.AreEqual(false, scalene, "Test Scalene"); 

Assert.IsTrue方法(布尔、字符串、对象[])的MSDN

验证指定的条件是否为真。如果 条件是错误的

显然,
Assert.IsTrue(false,…)
将失败

我想你的意思是:

Assert.IsTrue(equalateral == false, "Test Equalateral", equilateral);

对于错误的情况,您必须执行Assert.isFalse(与scalene类似)

@Nate:UpperCamelCase就不那么模棱两可了。@SLaks我明白了,你用UpperCamelCase来代替PascalCase()。我没有意识到关于使用其中一个或另一个的争论。底线是,公众成员的第一个字母应该是大写。让我们达成一致。为布尔值调用
AreEqual
,是一种不好的做法,会使代码的可读性稍差。是的,但代码可能就是这个意思。@McKay我不在读心术,只是简单地说使用
AreEqual
作为一个bool,对于那些可能会顺其自然地发现这个答案的人来说是不好的做法。@AaronMcIver这就是为什么我准确地陈述了我所说的。“是的”因为我同意你的观点,但同时,我认为斯莱克斯所说的可能对OP有所帮助。我们是在帮助OP。他可能犯了这么一个简单的错误。读心术有时会有所帮助。鉴于3个人(斯莱克斯、我和都铎)如何提到
断言.AreEqual
,这可能是一个合理的假设?