2016-12-08 82 views
0

使用nUnit 3.4.1。哪個集合斷言策略與TestCaseSource集合返回值一起使用

當使用TestCaseSource新起來的TestCaseData項目的列表:

new TestCaseData(new [] {"value1", "value2"}).Returns(new [] {"value2", "value1"}) 
在我的單元測試

,返回一個數組,看起來像輸入數據時:

new [] {"value1", "value2"} 

Returns值如上所示,我得到一個失敗的測試,因爲我假設nUnit使用CollectionAssert.AreEqual,這意味着相同的順序。

TestCaseData初始化使用一個額外的參數嘗試和CollectionAssert.AreEquivalent,而是和它的工作

我可以自定義的行爲嗎?

回答

0

該行爲不可配置。流利的Returns方法的處理方式與ExpectedResult相同。 NUnit只檢查是否相等。該NUnit code that handles this是相當簡單的,

if (testMethod.HasExpectedResult) 
    NUnit.Framework.Assert.AreEqual(testMethod.ExpectedResult, result); 

變通辦法是在預期值傳遞的第二個參數,並使用CollectionAssert.AreEquivalent是正確的。 NUnit不會改變ExpectedResult的語義,以允許您使用任意斷言。您可能會看到AreEqualAreEquivalent在語義上非常接近,但它們在內部非常不同。

+0

這就是我所做的很多。會很高興能夠配置此行爲。謝謝!我知道他們是非常不同的,但簡單的默認爲平等枚舉定製就足以能夠改變正在使用的那個。 –

+0

隨意輸入問題。我最初的感覺是我們不會支持它,但如果有足夠的用戶支持它,我們會考慮它。 –