0

我已经通过实现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。

有什么建议吗?

4

1 回答 1

3

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

只有在抛出异常的情况下,您的类才会验证异常。当没有抛出异常时,没有任何东西可以验证:)

当测试方法被装饰(或继承的属性)并且在测试期间没有抛出异常时,测试运行器(NUnit 或其他一些)有责任使测试失败。ExpectedExceptionAttribute

因此,您无需针对这种情况编写测试。

于 2013-06-05T21:00:55.580 回答