我試圖斷言列表包含某個字符串。由於我需要不區分大小寫評估條件,因此我使用了一種解決方法(沿着this blog post)。包含在nUnit中的大小寫不敏感的比較
但是,我想知道爲什麼似乎沒有辦法使Assert.Contains方法執行比較而不考慮區分大小寫。或者有沒有辦法做到這一點? (當我GOOGLE了它,我只得到了關於爲Assert.That方法NUnit的官方頁面上的約束命中。)
我試圖斷言列表包含某個字符串。由於我需要不區分大小寫評估條件,因此我使用了一種解決方法(沿着this blog post)。包含在nUnit中的大小寫不敏感的比較
但是,我想知道爲什麼似乎沒有辦法使Assert.Contains方法執行比較而不考慮區分大小寫。或者有沒有辦法做到這一點? (當我GOOGLE了它,我只得到了關於爲Assert.That方法NUnit的官方頁面上的約束命中。)
有沒有辦法在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。
火雞+1。我雖然是你的意思,但是嘿嘿。非常有趣的文章。 –
NUnit的不提供和記載:
Assert.That("red,green,blue".Split(','), Contains.Item("RED").IgnoreCase);
在NUnit的3,以下語法可用於:
Assert.That(new[] {"red", "green", "blue"}, Does.Contain("RED").IgnoreCase);
你使用NUnit?如果是這樣,它包含一個你可以在這裏使用的'StringAssert.AreEqualIgnoringCase'方法。或者,您可以將ToUpper()這兩個字符串作爲另一個bandaid。 – aevitas
@aevitas嗯...這打破了* Assert.SomeSome *看起來......但如果這是推薦的方式來做到這一點,那就這樣吧。至於我的問題深入:任何想法爲什麼沒有*包含*與比較控制的額外參數? –
我不知道,可能有一個實際的原因,但它可能會被忽略。如果你真的想堅持'Assert.Some'看起來,你可以使用'Assert.IsTrue(string.Equals(left,right,StringComparison.OrdinalIgnoreCase));' – aevitas