我不太明白您希望如何在一个不是模拟的对象上设置模拟期望。此外,您正在设置返回 IList 的期望,这并不是编译器生成迭代器时真正发生的情况。
如果你想专门测试迭代器,你应该
Assert.IsNotNull(zoo.Animals);
然后验证枚举器是否确实枚举了您添加到 Zoo 中的所有内容。这就是我要去那里的目的。 :)
我不确定是否可以测试是否调用了 yield return,因为 yield return 只是编译器生成的 IEnumerable 的语法糖。例如,调用
zoo.Animals.GetEnumerator();
不会执行您在枚举器中编写的任何代码。第一次发生在第一次调用 IEnumerator.MoveNext();
现在,如果您要测试具体 Zoo 和该 Zoo 所包含的 IEnumerable 之间的交互,您应该将 IEnumerable 设为 Zoo 上的一个字段,并将模拟 IEnumerable 注入该字段,而不是直接实现具体的 IEnumerable在动物园。
希望对大家有所帮助。