使用NUnit测试任何类型的异常

Jon*_*Jon 21 .net c# nunit

我有一个创建文件的类.

我现在正在进行集成测试以确保该类正常.

我传递无效的目录和文件名,以确保抛出异常.

在我的测试中,我正在使用:

[Test]
public void CreateFile_InvalidFileName_ThrowsException()
{
    //Arrange
    var logger = SetupLogger("?\\");

    //Act

    //Assert
    Assert.Throws<Exception>(()=> logger.CreateFile());
 }
Run Code Online (Sandbox Code Playgroud)

但是在这种情况下,测试失败,因为抛出了ArgumentException.我想通过添加Exception它会通过.

有没有办法让这个传递只使用Exception?

Rit*_*ton 35

Assert.Throws<>状态的帮助它"验证委托在调用时抛出特定类型的异常"

尝试使用该Assert.That版本,因为它将捕获任何Exception:

private class Thrower
{
    public void ThrowAE() { throw new ArgumentException(); }
}

[Test]
public void ThrowETest()
{
    var t = new Thrower();
    Assert.That(() => t.ThrowAE(), Throws.Exception);
}
Run Code Online (Sandbox Code Playgroud)

  • 如果您需要稍后检查异常属性或类型,您可以执行以下操作:`var ex = Assert.Throws(Is.AssignableTo(typeof(Exception)), () =&gt; DoSomething());` (4认同)

Mur*_*rad 8

适用于NUnit 2.5及以上版本

// Allow both ApplicationException and any derived type
Assert.Catch<ApplicationException>(() => logger.CreateFile());

// Allow any kind of exception
Assert.Catch(() => logger.CreateFile());
Run Code Online (Sandbox Code Playgroud)


Ada*_*ler 5

Throws.InstanceOf() 允许您传递基本异常类型,而不是更具体的派生类型。

[Test]
public void CreateFile_InvalidFileName_ThrowsException()
{
    //Arrange
    var logger = SetupLogger("?\\");

    //Act

    //Assert
    Assert.That(() => logger.CreateFile(), Throws.InstanceOf<Exception>());
}
Run Code Online (Sandbox Code Playgroud)