如何使用 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
),这应该编译得很好。
我只有一个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
),这应该编译得很好。