我要測試的函數返回一個int[][] aaiCluster1帶數據的aaiCluster1[0] = int[] { 1, 2 }aaiCluster1[1] = int[] { 0 }所以我測試使用CollectionAssert.AreEqual (aaiCluster1[0], new int[] { 1, 2 });CollectionAssert.AreEqual (aaiCluster1[1], new int[] { 0 });但順序int[]并不重要,可能會改變,所以我寧愿測試CollectionAssert.Contains (aaiCluster1, new int[] { 1, 2 });但這失敗了。此命令是否無法評估數組的內容?任何不需要額外輔助功能的合適解決方法的想法?編輯我必須澄清:這是關于測試一個鋸齒狀數組是否包含另一個嵌套在其中的簡單數組。我還需要解釋什么??編輯 #22 建議的答案CollectionAssert.AreEquivalent已經給出并再次被刪除,因為AreEquivalent這不是我正在尋找的......它在這里不起作用。給出了 1 個建議的答案Sequence.whatever,而且它更錯誤。編輯 #3我恢復了 Igor 對我的問題的更改,因為我覺得它們改變了太多含義。然而,我認為他的話是一個很好的替代描述,所以這是他的文字:所以我測試使用CollectionAssert.AreEqual(new int[] { 1, 2 }, aaiCluster1[0]);CollectionAssert.AreEqual(new int[] { 0 }, aaiCluster1[1]);但是aaiCluster1(實際)中的順序是未知的,因此一旦返回的順序aaiCluster1發生變化,上述測試就會失敗。題我怎么能調用類似的東西CollectionAssert.AreEqual(new int[] { 1, 2 }, aaiCluster1);// CollectionAssert.AreEqual(ICollection<T> expected, ICollection<ICollection<T>> actual);其中所有數組aaiCluster1都根據預期參數進行評估,new int[] { 1, 2 }如果發現至少一個包含的數組等于預期參數,則斷言通過?
2 回答

慕工程0101907
TA貢獻1887條經驗 獲得超5個贊
aaiCluster1.ContainsArray(new int[] { 1, 2 });
static class Extensions
{
public static bool ItemsEqual<TSource>(this TSource[] array1, TSource[] array2)
{
if (array1 == null && array2 == null)
return true;
if (array1 == null || array2 == null)
return false;
return array1.Count() == array2.Count() && !array1.Except(array2).Any();
}
public static bool ContainsArray<TSource>(this TSource[][] array1, TSource[] array2)
{
return array1.Any(x => x.ItemsEqual(array2));
}
}

九州編程
TA貢獻1785條經驗 獲得超4個贊
如果你想確保現場完全包含另一個你可以使用 linq,假設沒有重復,你可以這樣做:
Assert.IsTrue(new int[] { 1, 2 }.Except(aaiCluster1[0]).Count() == 0);
- 2 回答
- 0 關注
- 246 瀏覽
添加回答
舉報
0/150
提交
取消