Замена MatchType?

Новая версия NUnit 3.x больше не поддерживает ExpectedExceptionAttribute. Вместо этого есть Assert.Throws<MyException>(). Вероятно, более логичная концепция. Но замены старому доброму MatchType найти не удалось - есть ли? MyException может быть выброшен с рядом параметров, в NUnit 2.x я мог бы сравнить сообщение об исключении для включения определенного фрагмента текста, чтобы узнать, какой параметр был использован (и, конечно же, у меня не будет десятков классов исключений вместо просто логического). Как с этим справиться с помощью NUnit 3.x? Намеков найти не удалось.

С NUnit 2.x я бы сделал следующее:

[Test]
[ExpectedException(ExpectedException=typeof(MyException),  ExpectedMessage="NON_EXISTENT_KEY", MatchType=MessageMatch.Contains)]
public void DeletePatient_PatientExists_Succeeds()
 {
    Person p    = new Person("P12345", "Testmann^Theo", new DateTime(1960, 11, 5), Gender.Male);
    MyDatabase.Insert(p);

    MyDatabase.Delete(p.Key);

    // Attemp to select from a database with a non-existent key.
    // MyDatabase throws an exception of type MyException with "NON_EXISTENT_KEY" within the message string,
    // so that I can distinguish it from cases where MyException is thrown with different message strings.
    Person p1   = MyDatabase.Select(p.Key);
 }

Как я могу сделать что-то подобное с NUnt 3.x?

Пожалуйста, примите во внимание, что я имею в виду: средств, которые предоставляет NUnit, недостаточно для распознавания параметров, с которыми было сгенерировано исключение, поэтому это другой вопрос.


person Alex Konnen    schedule 06.02.2017    source источник
comment
Было бы здорово, если бы вы показали наглядный пример теста, который пытаетесь перенести. Ваша ситуация мне пока непонятна.   -  person Jon Skeet    schedule 06.02.2017
comment
Измените свой вопрос с помощью минимального воспроизводимого примера вместо того, чтобы помещать его в комментарии.   -  person Jon Skeet    schedule 06.02.2017
comment
Возможный дубликат NUnit: Assert.Throws   -  person NibblyPig    schedule 06.02.2017


Ответы (2)


Судя по всему, существует возможность (и даже более острая, чем вышеупомянутая) предоставить эту функциональность, хотя и не в самом NUnit 3, а в FluentAssertions (http://www.fluentassertions.com/). Там вы можете делать такие вещи, как

 Action act = () => MyDatabase.Select(p.Key);
 act.ShouldThrow<MyException>().Where(ex => ex.Message.Contains("NON_EXISTENT_KEY"));

Для всех моих практических целей это решает проблему.

person Alex Konnen    schedule 06.02.2017

person    schedule
comment
Я не понимаю что ты имеешь в виду. - person Alex Konnen; 06.02.2017
comment
Assert.Throws проверяет выброшенное исключение ожидаемого типа и возвращает экземпляр исключения. В следующей строке StringAssert проверяет, содержится ли ожидаемая строка в Exception.Message. Точно такой же результат, как и в вашем комментарии от FluentAssertions, но все от NUnit 3. - person R.Titov; 06.02.2017
comment
Хорошо, возможно, я неправильно понял StringAssert. - person Alex Konnen; 07.02.2017
comment
Дополнительная информация о StringAssert в NUnit 3: github.com/nunit/docs/wiki/String- Утвердить - person R.Titov; 08.02.2017
comment
В моем случае Google отправил меня сюда, и я не знал, что сделал MatchType (обновил старый код). Было бы неплохо получить объяснение, связывающее MatchType и StringAssert.Contains. - person Eric Fossum; 23.04.2019