我将它传递给我正在进行单元测试的对象的构造函数
It.Is<List<List<string>>>(x => x.Count == 10)
但是当我进入构造函数时,这个语句解析为null而不是一个数为10的List<List<string>>
。我误解了它是如何工作的吗?
答案 0 :(得分:2)
不打算调用It.Is
方法。实际上,我认为它应该只是抛出,而不是返回该类型的默认值。
它用于用于设定期望的表达式树:
interface IFoo { bool DoSomething(IList<IList<string>> strings); }
var mock = new Mock<IFoo>();
mock.Setup(f => f.DoSomething(It.Is<IList<IList<string>>>(l => l.Count == 10))
.Returns(true);
该示例设置了一个IFoo
的模拟对象,当传递带有10个元素的IList<IList<string>>
对象时,它将返回true。这意味着在以下调用之后,result
将为真:
IList<IList<string>> listWith10Elements = // create a list with 10 elements
bool result = mock.Object.DoSomething(listWith10Elements);
答案 1 :(得分:0)
如果您将某些内容传递给对象的构造函数,通常会使用模拟中的代理对象,并在该模型上使用Setup
提供您的类所需的任何上下文。
例如:
var mock = new Mock<List<List<string>>>();
mock.Setup(x => x.Count()).Returns(10);
var myClass = new MyClass(mock.Object);
使用Verify
检查互动情况。你有一个匹配器,你可以在Setup
和Verify
中使用它来匹配特定类型的参数。
当然,除了你将无法模仿List
,因为它没有你所追求的虚拟方法。请尝试使用和模拟ICollection<List<string>>
。
我认为这应该做你想要的。 Hope this helps.