我要测试的函数返回一个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 关注
- 218 浏览
添加回答
举报
0/150
提交
取消