Системное исключение скрыто за исключением Autofa c - PullRequest
0 голосов
/ 30 января 2020

У меня есть приложение, в которое я добавляю исключения в конструктор одного класса. У меня есть модульные и интеграционные тесты, написанные на nUnit, и я проверяю, выбрасывается ли это исключение, когда я хочу, например:

Assert.That(() => _fileOperationsModel.OpenFile("abc"), Throws.Exception.TypeOf<MissingFieldException>());

И оно работало отлично, пока я не начал использовать Autofa c. Мне нужно создать этот класс, который выдает исключение, используя autofa c, поэтому, когда вызывается конструктор, и выбрасывается мое исключение, MissingFieldException больше нет, но Autofac.Core.DependencyResolutionException.

И в этом исключении детали, есть 4 внутренних исключения. 3 из них также DependencyResolutionException, и последний из них - мой MissingFieldException.

Я пытался проверить это так:

var ex = Assert.Throws<Autofac.Core.DependencyResolutionException>(() => _fileOperationsModel.OpenFile("abc"));
Assert.That(ex.InnerException, Is.TypeOf<MissingFieldException>());

, но это не работает, потому что InnerException только один, и это также DependencyResolutionException.

Есть ли у вас какие-либо идеи, как я могу обработать эти исключения и как я могу проверить это? Я новичок в Autofa c, и я пытался найти что-то об этом, но безрезультатно.

РЕДАКТИРОВАТЬ: Я знаю, что могу сделать это так

  var ex = Assert.Throws<Autofac.Core.DependencyResolutionException>(() => _fileOperationsModel.OpenFile("abc"));
  Assert.That(ex.InnerException, Is.TypeOf<DependencyResolutionException>());
  Assert.That(ex.InnerException.InnerException, Is.TypeOf<DependencyResolutionException>());
  Assert.That(ex.InnerException.InnerException.InnerException, Is.TypeOf<DependencyResolutionException>());
  Assert.That(ex.InnerException.InnerException.InnerException.InnerException, Is.TypeOf<MissingFieldException>());

, но, возможно, там что-то лучше и не так уж плохо?

1 Ответ

0 голосов
/ 30 января 2020

Может быть это ранее может дать вам некоторое вдохновение.

В противном случае вы можете попробовать написать собственный сопоставитель ограничений на основе сопоставителя исключений по умолчанию , однако в строке 50 повторяются внутренние исключения.

Если оба варианта не подходят, вы можете прибегнуть к собственному предлагаемому решению. Я не думаю, что в данный момент в NUnit реализована глубокая вложенная проверка внутренних исключений. Более того, я думаю, что вы можете обойтись без проверки промежуточного DependencyResolutionExceptions.

...