Как издеваться над DbUpdateConcurrencyException - PullRequest
1 голос
/ 09 июля 2019

Я пытаюсь смоделировать функцию в моем сервисе, чтобы выбросить 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 без необходимости проходить проверки, что конструкторесть

1 Ответ

2 голосов
/ 09 июля 2019

На основании документов, которые вы предоставили в комментариях, вы должны использовать ctor с двумя параметрами. Хитрость заключается в том, чтобы предоставить не нуль string и не пустой List<IUpdateEntry>, moq может помочь вам в этом, например,

new DbUpdateConcurrencyException(string.Empty, new List<IUpdateEntry>{Mock.Of<IUpdateEntry>()});
...