单元测试IExpectException的实现

时间:2013-06-03 18:12:31

标签: nunit

我已经通过实现NUnit.Framework.IExpectException接口创建了一个预期的异常属性,如其中所记录的那样(http://www.nunit.org/index.php?p=exception&r=2.6.2)并且它运行良好。它验证抛出的异常是否为正确类型,并验证异常上某些属性的值。

[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。

有什么建议吗?

1 个答案:

答案 0 :(得分:3)

您未能在此处编写测试的原因是您正在尝试测试不属于您班级的功能。

只有在抛出异常的情况下,您的类才会验证异常。如果没有抛出异常,则无需验证:)

当测试方法使用ExpectedExceptionAttribute(或继承的属性)进行修饰时, test runner (NUnit或其他)负责测试失败,并且在测试期间没有抛出异常

所以,你不需要在这种情况下编写测试。