2014-07-08 35 views
9

我試圖斷言列表包含某個字符串。由於我需要不區分大小寫評估條件,因此我使用了一種解決方法(沿着this blog post)。包含在nUnit中的大小寫不敏感的比較

但是,我想知道爲什麼似乎沒有辦法使Assert.Contains方法執行比較而不考慮區分大小寫。或者有沒有辦法做到這一點? (當我GOOGLE了它,我只得到了關於爲Assert.That方法NUnit的官方頁面上的約束命中。)

+0

你使用NUnit?如果是這樣,它包含一個你可以在這裏使用的'StringAssert.AreEqualIgnoringCase'方法。或者,您可以將ToUpper()這兩個字符串作爲另一個bandaid。 – aevitas

+0

@aevitas嗯...這打破了* Assert.SomeSome *看起來......但如果這是推薦的方式來做到這一點,那就這樣吧。至於我的問題深入:任何想法爲什麼沒有*包含*與比較控制的額外參數? –

+0

我不知道,可能有一個實際的原因,但它可能會被忽略。如果你真的想堅持'Assert.Some'看起來,你可以使用'Assert.IsTrue(string.Equals(left,right,StringComparison.OrdinalIgnoreCase));' – aevitas

回答

11

有沒有辦法在Assert.Contains指定IGNORECASE。無論是被忽視的東西還是我不知道的東西。但是,您可以使用

StringAssert.AreEqualIgnoringCase(left, right); 

可以在您的單元測試中實現相同的結果。

或者,如果你願意堅持使用Assert.Foo() 「主題」,你可以做這樣的事情:

Assert.IsTrue(string.Equals(left, right, StringComparison.OrdinalIgnoreCase)); 

,或者因爲Contains治療陣列:

Assert.IsTrue(list.Any(element => element.ToUpper() == "VILTERSTEN")); 

,你叫ToUpper()在左邊和右邊的字符串操作數上,這也有效地使比較忽略大小寫。 OrdinalIgnoreCase是爲了確保文化的一些角落案例(閱讀土耳其語)不會導致意想不到的結果。如果你有興趣閱讀,請看the Turkey test

+0

火雞+1。我雖然是你的意思,但是嘿嘿。非常有趣的文章。 –

8

NUnit的不提供和記載:

Assert.That("red,green,blue".Split(','), Contains.Item("RED").IgnoreCase); 
0

在NUnit的3,以下語法可用於:

Assert.That(new[] {"red", "green", "blue"}, Does.Contain("RED").IgnoreCase);