我有一个创建文件的类.
我现在正在进行集成测试以确保该类正常.
我传递无效的目录和文件名,以确保抛出异常.
在我的测试中,我正在使用:
[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)
适用于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)
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)