忽略xUnit.net中的异常

jas*_*son 13 .net c# assert xunit

我有些情况下我不关心抛出什么异常(只要抛出一些异常).不幸,

Assert.Throws<Exception>(someDelegate);
Run Code Online (Sandbox Code Playgroud)

除非完全Exception抛出一个(因此不是派生类的实例)的实例,否则不会通过.我知道我可以获得我想要的行为

Exception exception = Record.Exception(someDelegate);
Assert.NotNull(exception);
Run Code Online (Sandbox Code Playgroud)

但它没有正确的解读.我是否在xUnit中缺少具有我想要的行为的东西?这是两个测试,表明我的意思:

[Fact]
public void Throws_exception_and_passes() {
    Exception exception = Record.Exception(
        () => { throw new InvalidOperationException(); }
    );
    Assert.NotNull(exception);
}

[Fact]
public void Throws_exception_and_fails() {
    Assert.Throws<Exception>(
        () => { throw new InvalidOperationException(); }
    );
}
Run Code Online (Sandbox Code Playgroud)

poi*_*r12 7

根据这里的文档:

http://xunit.codeplex.com/wikipage?title=HowToUse&referringTitle=Home

您必须指定要抛出的异常类型.一般来说,这是一种很好的做法.您应该能够预测测试会引发什么类型的异常.您应该能够以允许您预测此方法的方式设计方法和测试.

有很多方法可以解决这个问题,比如试一试自己,但是你应该考虑改变你的设计.


Jon*_*nna 5

它在这个问题时并不存在,但现在可以Assert.ThrowsAny<Exception>用来测试任何派生的异常Exception(因此任何异常),以及Assert.ThrowsAny<ArgumentException>测试任何派生的异常等变体ArgumentException.