2017-02-06 2 views
0

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

С 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, недостаточны для распознавания параметров, с которыми было выбрано исключение, так что это другой вопрос.

+0

Это действительно поможет, если вы продемонстрируете ясный пример теста, который вы пытаетесь выполнить. На данный момент мне неясно. –

+0

Пожалуйста, отредактируйте свой вопрос с помощью [mcve] вместо того, чтобы помещать его в комментарии. –

+1

Возможный дубликат [Должен ли я использовать метод Assert.Throws nunit или атрибут Expected Exception?] (Http://stackoverflow.com/questions/15014461/should-i-use-nunits-assert-throws-method-or-expected- exception-attribute) –

ответ

0

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

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

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

1
var ex = Assert.Throws<MyException>(()=> MyDatabase.Select(p.Key)); 
StringAssert.Contains("NON_EXISTENT_KEY", ex.Message); 
+0

Я не понимаю, что вы имеете в виду. –

+0

Assert.Throws проверяет исключение ожидаемого типа и возвращает экземпляр исключения. В следующей строке проверки StringAssert, если ожидаемая строка содержит в Exception.Message. Точно такой же результат, как в вашем комментарии FluentAssertions, но все по NUnit 3. –

+0

ОК, возможно, я неправильно понял StringAssert. –