2013-06-03 3 views
0

Я создал ожидаемый атрибут исключения, реализовав интерфейс NUnit.Framework.IExpectException, как описано там (http://www.nunit.org/index.php?p=exception&r=2.6.2), и он работает очень хорошо. Он подтверждает, что выбранное исключение имеет правильный тип и проверяет значение некоторых свойств для исключения.Модульное тестирование реализации IExpectException

[AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = false)] 
public class ExpectedHttpErrorExceptionAttribute : ExpectedExceptionAttribute, IExpectException 
{ 
    public HttpStatusCode StatusCode { get; set; } 

    public ExpectedHttpErrorExceptionAttribute() 
     :base(typeof(HttpError)) 
    {} 

    public ExpectedHttpErrorExceptionAttribute(HttpStatusCode statusCode) 
     :this() 
    { 
     StatusCode = statusCode; 
    } 

    public void HandleException(Exception ex) 
    { 
     Assert.That(ex, Is.TypeOf(ExpectedException), "Expected exception of type '{0}' but an exception of type '{1}' has been throwned.", typeof(HttpError).FullName, ex.GetType().FullName); 

     var httpStatusCode = ((HttpError) ex).StatusCode; 
     Assert.That(httpStatusCode, Is.EqualTo(StatusCode), "Expected status code '{0}' but was '{1}'.", StatusCode, httpStatusCode); 

    } 
} 

Моя проблема заключается в том, что я хочу модульного тестирования, что атрибут, но я не могу понять способ проверить следующий случай:

A unit test that have the attribute should fail if no exception are thrown.

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

Любое предложение?

ответ

3

Причина, по которой вы не можете написать тест, заключается в том, что вы пытаетесь проверить функциональность, которая не отвечает за ваш класс.

Ваш класс проверяет исключение только в том случае, если выбрано исключение. Когда не исключение брошено там ничего не проверять :)

Это ответственность тест бегун (NUnit или какой-либо другой), чтобы провалить испытание, когда метод испытания украшен ExpectedExceptionAttribute (или унаследованный атрибут) и есть никакое исключение не было брошено во время теста.

Итак, вам не нужно писать тестовый файл для такого сценария.

Смежные вопросы