C# 验证方法是使用数组调用的,并显示清除的失败消息

C# 验证方法是使用数组调用的,并显示清除的失败消息,c#,.net-core,moq,C#,.net Core,Moq,作为测试的一部分,我有一个验证方法。它的一个参数是可能非常大(超过100字节)的数组。我如何能够轻松找到故障点,而不需要进行一些认真的调试 被测线路为: mockDependeny.verify(x=>x.callMethod(expectedModel, expectedModel.Length, It.IsAny<otherKindOfParam>())); mockDependeny.verify(x=>x.callMethod(expectedModel,expect

作为测试的一部分,我有一个验证方法。它的一个参数是可能非常大(超过100字节)的数组。我如何能够轻松找到故障点,而不需要进行一些认真的调试

被测线路为:

mockDependeny.verify(x=>x.callMethod(expectedModel, expectedModel.Length, It.IsAny<otherKindOfParam>()));
mockDependeny.verify(x=>x.callMethod(expectedModel,expectedModel.Length,It.IsAny());
expectedModel
在方法(理论)中传递,是一个数组

理论中的一组数据/预期有效,但下一组数据表示失败。它给我的信息不是很有帮助-

应至少对模拟进行一次调用,但从未执行过:x=>x.callMethod([1,2,3,4,5,6,7,8,9,10,…),175,It.IsAny()

执行的调用: Mock(x):MyDependency.callMethod([1,2,3,4,5,6,7,8,9,10,…],175,instanceOfOtherParam)

我能从中收集到的是,在数组中的下一个n-10项中,有一些不匹配的项(前十项相同,总长度相同)


有没有办法从测试中获得更好的反馈,这样我就不必调试和手动比较expceted数组和实际数组的内容了?

It.Is
替换
expectedModel
数组参数,并实现您想要的任何功能。例如:

mockDependency.Verify(x=>x.callMethod(It.Is(m=>VerifyThisEnumerableParam(m,expectedModel)),expectedModel.Length,It.IsAny());
...
私有布尔验证ThisEnumerableParam(已接收IEnumerable,预期IEnumerable)
{
如果(收到!=预期)
{
var receivedArray=received.ToArray();
var expectedArray=expected.ToArray();
if(receivedArray.Length!=预期阵列长度||
receivedArray.Where((t,idx)=>!Object.Equals(t,expectedArray[idx])).Any()
{
//现在让我们想象一下这两件事
抛出新AssertFailedException($@“已接收!”=应为
应为:{String.Join(“,”,应为.Select(t=>t.ToString())}
received:{String.Join(“,”,received.Select(t=>t.ToString())}”);
}
}
返回true;
}

以上不是傻瓜式的(没有额外的空值检查等),但希望您能理解。如果您只喜欢第一个不同的索引或其他内容,请在方法中实现它。

您试过调试测试吗?这说明了什么?您需要为我们提供一个示例,以便我们能够指出问题所在。@Xerilio我可以调试测试,但接下来我需要手动比较真正的长数组。这个问题的重点是找出如何避免比较两个“数据集”应该是相当琐碎的。对于低级示例:打印出数组并使用。或者,如果能看到一个新的世界,那就太好了。否则就无法判断出什么是错误的。我的问题不是找出测试中的错误。我知道怎么做。我只是想看看是否有一种更有效的方法,或者是否有一种获得更清晰反馈的方法