c# - 尽管抛出异常,但测试 ExpectedException 的单元测试失败

标签 c# unit-testing

开始用C#实现单元测试,使用MSTest

在这个特定的测试中,我试图验证是否抛出了 ArgumentNullException。尽管我的代码确实抛出了异常,但我的测试失败了,因为它显然没有收到那种类型的异常。

我哪里错了?一定会很简单....

我的测试是这样的:

[TestMethod()]
[ExpectedException(typeof(ArgumentNullException), "A null HttpContent was inappropriately allowed")]
public void Test_HttpContent_Null_Throws_Exception()
{
    MultipartFormDataMemoryStreamProvider provider = new MultipartFormDataMemoryStreamProvider();
    Assert.ThrowsException<ArgumentNullException>(()=>provider.GetStream(null, null));
}

GetStreams() 方法如下所示:

public override Stream GetStream(HttpContent parent, HttpContentHeaders headers)
    {
        if (parent == null)
            throw new ArgumentNullException("parent");

        if (headers == null)
            throw new ArgumentNullException("headers");

        var contentDisposition = headers.ContentDisposition;
        if (contentDisposition == null)
            throw new InvalidOperationException("Did not find required 'Content-Disposition' header field in MIME multipart body part.");

        _isFormData.Add(String.IsNullOrEmpty(contentDisposition.FileName));
        return base.GetStream(parent, headers);
    }

最佳答案

这一行中的断言正在处理异常:

Assert.ThrowsException<ArgumentNullException>(()=>provider.GetStream(null, null));

因此,就 ExpectedException 而言,测试框架并未发现它被抛出。您可以删除属性或断言:

[TestMethod()]
[ExpectedException(typeof(ArgumentNullException), "A null HttpContent was inappropriately allowed")]
public void Test_HttpContent_Null_Throws_Exception()
{
    MultipartFormDataMemoryStreamProvider provider = new MultipartFormDataMemoryStreamProvider();
    provider.GetStream(null, null);
}

关于c# - 尽管抛出异常,但测试 ExpectedException 的单元测试失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44048231/

相关文章:

java - BDD 方式的 JUnit 测试应该如何集中

angularjs - 在 Jasmine 测试中模拟 document.activeElement

javascript - 如何测试 Chai 中函数的回调?

c# - PasswordVault Windows Phone 等效?

c# - 如何将 getUserMedia 与 geckofx 一起使用

javascript - 将复杂对象从 View 发送到 MVC 操作作为非 ajax 调用

c# - 使用 .Net 4.5 异步功能进行套接字编程

unit-testing - 使用单元测试但不使用 TDD 的编程工作流

javascript - 在 sinon.js 中使用 ES 模块时如何 stub 常量函数?

c# - URL 中的 URL 编码斜杠