我要测试的函数返回带有数据的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 });
但是失败了。
该命令不能评估数组的内容吗?
有什么不需要适当辅助功能的合适解决方法的想法吗?
修改
我要澄清一下:
这是关于测试锯齿状数组是否包含另一个
我还要解释什么?
修改#2
2个提示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 }
进行评估,并且如果找到至少一个包含的数组等于预期值,则断言通过?
答案 0 :(得分:0)
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));
}
}
答案 1 :(得分:-1)
如果要确保现场完全包含另一个,则可以使用linq,假设没有重复项,您可以这样做:
Assert.IsTrue(new int[] { 1, 2 }.Except(aaiCluster1[0]).Count() == 0);