使用Moq,有没有办法声明性地配置模拟对象以引发异常?

时间:2019-03-08 19:32:25

标签: c# linq exception moq

我以前曾使用Moq的 linq进行模拟功能,但仅用于设置属性或从简单函数返回值。我很好奇是否有一种方法可以配置模拟对象以使用Mock.Of<>引发异常?

它接受Expression<Func<T, bool>>作为谓词。如果它能够使用linq表达式来配​​置模拟方法以引发异常,那么我将在正确的语法上绘制空白以实现此目的。

这有可能吗?

1 个答案:

答案 0 :(得分:1)

来自Quickstart

  

LINQ to Mocks非常适合快速建立通常不需要进一步验证的依赖项。如果以后确实需要验证这些模拟的某些调用,则可以使用Mock.Get(instance)轻松地检索它们。

尽管它没有明确提及例外,但同样适用于它们:

var mockService = Mock.Of<ISomeService>(/*your usual declarative setup*/);

// adding exceptions by reverting to classic setup:
Mock.Get(mockService).Setup(s => s.MyMethod()).Throws(myException); // or Returns/Verify/etc.

因此,您最好的办法是将两种方式混合使用。 Mock.Of<>可以完成简单的设置,而Mock.Get()可以通过检索内部创建的模拟来添加验证/例外。