如何使用Moq模拟扩展方法?

我正在编写一个依赖于扩展方法结果的测试,但我不希望该扩展方法的将来失败会破坏该测试。模拟该结果似乎是显而易见的选择,但是

(扩展方法的要求)的方法。Moq.Protected和Moq.Stub也有类似的想法,但是在这种情况下他们似乎没有提供任何帮助。我是否缺少某些东西,还是应该以其他方式处理?

这是一个简单的示例,但失败了,并出现了常见的 。这是一个需要模拟扩展方法的糟糕示例,但应该这样做。

public class SomeType {

int Id { get; set; }

}

var ListMock = new Mock<List<SomeType>>();

ListMock.Expect(l => l.FirstOrDefault(st => st.Id == 5))

.Returns(new SomeType { Id = 5 });

至于可能建议我使用隔离器的所有TypeMock迷:我很感谢所做的努力,因为看起来TypeMock可以蒙住双眼和令人生厌,但我们的预算不会很快增加。

回答:

扩展方法只是伪装的静态方法。Moq或Rhinomocks之类的模拟框架只能创建对象的模拟实例,这意味着无法模拟静态方法。

以上是 如何使用Moq模拟扩展方法? 的全部内容, 来源链接: utcz.com/qa/413195.html

回到顶部