如何使用Moq模拟使属性在set上抛出异常?

McM*_*ons 4 c# unit-testing moq mocking

我正在努力获得一些遗留代码,我们正在使用Moq 4进行隔离.有一个类在set {}组件中有一个带有验证的属性.我需要它在调用我的一个测试时抛出一个异常,但我无法做到这一点.我尝试过以下方法:

fakeNetwork
  .Setup(n => n.IpAddress)
  .Throws(new SystemNotFoundException("1.1.1.1");
Run Code Online (Sandbox Code Playgroud)

没有异常被抛出.

fakeNetwork
  .SetupSet(n => n.IpAddress)
  .Throws(new SystemNotFoundException("1.1.1.1");
Run Code Online (Sandbox Code Playgroud)

这种用法已经过时了.替换是.SetupSet(Action),但我不确定如何进行抛出异常的操作.我们将警告视为错误,因此我不知道这是否会起作用,但由于无论如何我都无法使用过时的版本,所以我没有尝试过关闭检查.

任何提示都会非常有用!

Siy*_*ams 7

改编自Moq文档

mock.SetupSet(foo => foo.Name = "foo").Throws<ArgumentException>();
Run Code Online (Sandbox Code Playgroud)

  • 不要觉得自己像个白痴,因为这可能会帮助别人.我遇到了一个与此类似的问题,我花了很长时间才弄明白.真正让你失望的是'小事'! (2认同)