c# - C# CollectionAssert.Contains (int[][], int[]) 不通过
问题描述
我要测试的函数返回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
我恢复了伊戈尔对我的问题的更改,因为我觉得它们改变了太多的意思。但是,我认为他的话是一个很好的替代描述,所以这是他的文字:
所以我测试使用
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 }
如果至少有一个包含的数组被发现等于预期,则断言通过?
解决方案
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));
}
}
推荐阅读
- azure - Azure 服务总线 - 多个订阅者不会收到所有消息
- excel-formula - Excel公式使单元格只读
- java - 保存更多 10 个项目的 ArrayList 未排序到 DB
- callback - 我在哪里可以找到无限网格存储的其他回调?
- oracle12c - 如何从 SOA Web 服务调用中解锁 IBM 内容导航器中的对象
- c# - 为什么 JWT 过期太快
- excel - 如何从 Excel VBA 代码触发 Access 数据库表单中的单击
- asp.net-mvc - 如果 IIS 应用程序工作进程挂起会怎样?
- python - 多线程时循环不使用新变量运行
- java - 我们使用@inject 时的默认范围是什么