2012-01-05 75 views
2

我正在爲應用程序的單元測試工作,下面是一個單元測試,我只是不知道爲什麼它失敗。單元測試失敗時,它不應該這樣做

測試結果應該是「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? 
    } 
+0

你'Assert.IsTrue假的情況下(假,... '代碼看起來相當可疑。 – 2012-01-05 16:38:23

+1

.Net公共成員名稱應該是UpperCamelCase。 – SLaks 2012-01-05 16:40:32

+1

@SLaks我認爲它是'camelCase'和'PascalCase' ...?(http://msdn.microsoft.com/zh-cn/library /x2dbyw72.aspx) – Nate 2012-01-05 16:48:54

回答

6

你錯誤地打電話給IsTrue
第一個參數是布爾測試:

Assert.IsFalse(equalateral, "Test Equalateral");  

您也可以撥打AreEqual

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

爲bool值調用'AreEqual'是不好的做法,恕我直言,使得代碼的可讀性略差。 – 2012-01-05 16:41:45

+2

是的,但這就是OP可能代表的*的含義。 – McKay 2012-01-05 16:43:13

+0

@McKay我不是在讀心靈的事情,只是簡單地指出,使用'AreEqual'作爲布爾對於那些可能偶然發現這個問題的人來說是不好的做法。 – 2012-01-05 16:44:54

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

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"); 
1

Assert.IsTrue Method (Boolean, String, Object[])的MSDN:

驗證指定的條件真正。如果條件爲假, 斷言失敗。

顯然Assert.IsTrue(false,...)會失敗。

我想你的意思是:

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

爲你所要做的Assert.isFalse(equalateral ......,同樣有斜角肌