unit-testing - 方法设置中的 Moq 匹配和验证数组/IEnumerable 参数

标签 unit-testing mocking moq

在设置对我的模拟对象的方法调用的期望时,我在验证 Ienumerable/Array 类型参数时遇到问题。我认为因为它匹配不同的引用,所以它不认为它是匹配的。我只是想让它匹配数组的内容,有时我什至不关心顺序。

mockDataWriter.Setup(m => m.UpdateFiles(new string[]{"file2.txt","file1.txt"} ) );

理想情况下,我想要像下面这样工作的东西,我可能会编写一个扩展方法来做到这一点。
It.Contains(new string[]{"file2.txt","file1.txt"})

It.ContainsInOrder(new string[]{"file2.txt","file1.txt"})

我现在可以匹配这些的唯一内置方式是使用谓词功能,但似乎这个问题很常见,应该内置。

是否有内置的方法来匹配这些类型,或者我可以使用的扩展库。如果没有,我就写一个扩展方法什么的。

谢谢

最佳答案

必须实现一些自定义匹配器,在版本 3 中还没有找到任何其他内置方法来完成此操作。使用 http://code.google.com/p/moq/wiki/QuickStart作为资源。

public T[] MatchCollection<T>(T[] expectation)
{
  return Match.Create<T[]>(inputCollection => (expectation.All((i) => inputCollection.Contains(i))));
}

public IEnumerable<T> MatchCollection<T>(IEnumerable<T> expectation)
{
  return Match.Create<IEnumerable<T>>(inputCollection => (expectation.All((i) => inputCollection.Contains(i))));
}


public void MyTest()
{

...

mockDataWriter.Setup(m => m.UpdateFiles(MatchCollection(new string[]{"file2.txt","file1.txt"}) ) );

...


}

关于unit-testing - 方法设置中的 Moq 匹配和验证数组/IEnumerable 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1285316/

相关文章:

c# - 如何模拟构造函数内部的依赖关系?

java - mockito 验证与 ArgumentCaptor 的交互

java - Intellij 中的模拟不会忽略模拟类中的编译错误?

c# - 加里奥.Model.ModelException : An exception occurred while invoking a test driver

JAVA:与接口(interface)的实现相比,InvocationHandler 有哪些优势?

c# - 需要帮助以更好地理解最小起订量

unit-testing - flutter 单元测试。运行测试时出错

java - 如何使用 EasyMock 使 java.lang.reflect.Method.getReturnType 返回 void.class ?

c# - 在调用方法时使用 Moq 分配属性值

c# - 如何获得最小起订量设置以根据输入更改输出参数?