【发布时间】:2017-05-26 04:14:00
【问题描述】:
我正在尝试在 Microsoft.Office.Interop.Word 程序集中模拟 Variables 界面
var variables = new Mock<Variables>();
variables.Setup(x => x.Count).Returns(2);
variables.Setup(x => x.GetEnumerator()).Returns(TagCollection);
private IEnumerator TagCollection()
{
var tag1 = new Mock<Variable>();
tag1.Setup(x => x.Name).Returns("Foo");
tag1.Setup(x => x.Value).Returns("Bar");
var tag2 = new Mock<Variable>();
tag2.Setup(x => x.Name).Returns("Baz");
tag2.Setup(x => x.Value).Returns("Qux");
yield return tag1.Object;
yield return tag2.Object;
}
我的代码如下所示:
// _variables is an instance of Variables interface
var tags = from variable in _variables.OfType<Variable>()
where variable.Name == "Foo"
select variable.Value;
var result = tags.ToList();
上面代码的最后一行抛出了 NullReferenceException。如果我使用 foreach 循环遍历 _variables 集合,我可以毫无问题地访问 Variable 的模拟对象。我在这里做错了什么?
【问题讨论】:
-
您的
foreach的工作原理是什么样的? -
对不起,这是一个疯狂的猜测,但我在模拟期间返回迭代集合时遇到了类似的问题,这是因为我没有在最后调用列表。试试这个:
var tags = variables.OfType<Variable>().Where(x => x.Name == "Foo").Select(x => x.Value).ToList(); -
@William OP 在下一行调用
ToList。 -
@William 它抛出 NullReferenceException
-
我的猜测是
OfType对模拟对象不太好。您是否将OfType与有效的foreach一起使用?还有什么类型的_variables需要你首先使用OfType。