如何使用 Moq 在 get-属性 上模拟异常

How to mock an Exception on a get-property with Moq

我只有一个getter属性喜欢

public ICar Car
{
  { 
    get 
    {
      return _car ?? (_car = GetCar());
    }
  }
}

GetCar() 在某些情况下会抛出 NotSupportedException,我想对此进行单元测试。我正在使用最小起订量。

我正在尝试在我的单元测试中使用它,但它不适用于属性,仅适用于方法

var sut = new CarProcessor(...); //init subject under test
Assert.Throws<NotSupportedException>(() => sut.Car); //evaluate result of Car property

这不会编译,它说 "Only assignment call, increment, decrement, await and new object expression can be used as a statement" 错误。

对方法执行与上述相同的操作 属性 效果很好。

您可以通过在语句 lambda 中分配 属性 来解决此问题,如下所示:

Assert.Throws<NotSupportedException>(() => { var _ = sut.Car; });

这将尝试将 属性 分配给一次性变量 _(仅限 C# 7+,如果您针对较低的语言级别进行编译,请使用 x),这应该编译得很好。