繁体   English   中英

单元测试在不应该做的时候失败

[英]Unit-test fail when it shouldn't do

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

测试结果应该是 "isosceles" 为真,"equalateral" 和 "scalene" 为假,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.IsTrue检查第一个参数是否为真。

你可能想要的是:

    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 Method (Boolean, String, Object[])的 MSDN :

验证指定的条件是否为真。 如果条件为假,则断言失败。

显然Assert.IsTrue(false,...)会失败。

我想你的意思是:

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

使用断言语句是错误的方式。 这是正确的:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM