2012-06-25 2 views
0

у меня есть это:Как ожидать исключения и все еще пройти тест?

Expect.Once.On(someObj).Method("SomeMethod") 
    .With(1) // correct value is 2, I want this to fail 
    .Will(Throw.Exception(new Exception())); 

Исключение выбрасывается nmock, когда он обнаруживает, что я ставлю 1 вместо 2. Однако тест не удается (красный), а не мимоходом. Как пройти этот тест, даже если я ожидаю исключения?

+0

Какие модульного тестирования рамки вы используете? – 48klocs

+0

MSTest. Тем не менее, это nmock, о котором я забочусь здесь, а не о том, как это делают другие среды тестирования. –

+0

@ O.O - NMock - это насмешливая структура, а не единичная платформа тестирования. Вам все равно придется утверждать, что в ваших тестах ожидается исключение, вызванное макетом. – Lee

ответ

2
[ExpectedException (typeof(Exception))] 

Редактировать: спасибо, не имеете студию прямо сейчас и не были на 100% уверены в синтаксисе.

+0

Я думаю, что это устарело. Рекомендуемая версия - это то, что предложил @Lee. – MBen

+0

Является ли это встроенным для mstest, или нам понадобится какой-то пользовательский метод расширения для чего-то подобного. –

+0

Извините, что использовал NUnit. – MBen

5

Если вы используете NUnit, то вы можете сделать:

Assert.Throws<Exception>(() => { someObj.SomeMethod(1); }); 

Вы также можете украсить тест с атрибутом ExpectedException, хотя это заставит тест пройти, если какой-либо Exception отбрасывается, а не просто заявление, которое вы хотите проверить.

EDIT: Если вы используете MSTest, насколько я знаю, вы можете только использовать атрибуты ожидать исключения, т.е.

[ExpectedException(typeof(Exception)] 
public void TestMethod() { ... } 

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

Вы также можете определить свой собственный метод тиражирования функциональности NUnit:

public static class ExceptionAssert 
{ 
    public static void Throws<T>(Action act) where T : Exception 
    { 
     try 
     { 
      act(); 
     } 
     catch (T ex) 
     { 
      return; 
     } 
     catch (Exception ex) 
     { 
      Assert.Fail(string.Format("Unexpected exception of type {0} thrown", ex.GetType().Name)); 
     } 

     Assert.Fail(string.Format("Expected exception of type {0}", typeof(T).Name)); 
    } 
} 
Смежные вопросы