我正在尝试在服务中模拟函数以抛出DbUpdateConcurrencyException
。我的代码仅需要检查类型为DbUpdateConcurrencyException
的异常,而无需读取异常消息或构造函数要求的条目列表。
我想通过调用Mock
的无参数构造函数来设置DbUpdateConcurrencyException
,但是EFCore中不存在该构造函数。
var mockService = new Mock<IMyService>();
mockService.Setup(service => service.UpdateFooAsync(It.IsNotNull<Data.Foo>())).Throws(new DbUpdateConcurrencyException());
我尝试使用一些参数调用new DbUpdateConcurrencyException()
,但是在参数上进行了一些检查,使我无法使用空/空数据。
new DbUpdateConcurrencyException(null, null)
给出:
Message: System.ArgumentNullException : Value cannot be null.
Parameter name: entries
new DbUpdateConcurrencyException("", new List<IUpdateEntry>())
给出:
Message: System.ArgumentException : The collection argument 'entries' must contain at least one element.
Moq中是否有一种方法可以模拟DbUpdateConcurrencyException
,而不必经过构造函数的检查?
答案 0 :(得分:2)
基于您在评论中共享的文档,您应该使用带有两个参数的ctor。诀窍是提供不为空的string
和不为空的List<IUpdateEntry>
,moq
可以帮助您,例如
new DbUpdateConcurrencyException(string.Empty, new List<IUpdateEntry>{Mock.Of<IUpdateEntry>()});