gpt4 book ai didi

c# - NUnit 预期异常

转载 作者:IT王子 更新时间:2023-10-29 03:49:55 25 4
gpt4 key购买 nike

我有一组测试用例,其中一些预计会抛出异常。正因为如此,我已经为这些测试设置了属性以期待像这样的异常:

[ExpectedException("System.NullReferenceException")]

当我在本地运行测试时,一切都很好。但是,当我将我的测试移至运行 TeamCity 的 CI 服务器时,我所有具有预期异常的测试都失败了。这是一个已知错误。

我知道还有 Assert.Throws<>Assert.Throws NUnit 提供的方法。

我的问题是如何使用这些而不是我当前使用的属性?

我浏览了 StackOverflow 并尝试了一些方法,但似乎都不适合我。

是否有一个简单的 1 行解决方案来使用它?

最佳答案

我不确定您尝试过什么给您带来麻烦,但您可以简单地将 lambda 作为第一个参数传递给 Assert.Throws。这是我通过的一项测试中的一项:

Assert.Throws<ArgumentException>(() => pointStore.Store(new[] { firstPoint }));

好吧,这个例子可能有点冗长。假设我有一个测试

[Test]
[ExpectedException("System.NullReferenceException")]
public void TestFoo()
{
MyObject o = null;
o.Foo();
}

这会正常通过,因为 o.Foo() 会引发空引用异常。

然后您将删除 ExpectedException 属性并将对 o.Foo() 的调用包装在 Assert.Throws 中。

[Test]
public void TestFoo()
{
MyObject o = null;
Assert.Throws<NullReferenceException>(() => o.Foo());
}

Assert.Throws “尝试调用表示为委托(delegate)的代码片段,以验证它是否抛出特定异常。” () => DoSomething() 语法表示一个 lambda,本质上是一个匿名方法。所以在这种情况下,我们告诉 Assert.Throws 执行片段 o.Foo()

所以不,您不只是像添加属性那样添加一行;您需要在对 Assert.Throws 的调用中显式包装将抛出异常的测试部分。您不一定必须使用 lambda,但这通常是最方便的。

关于c# - NUnit 预期异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3407765/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com