gpt4 book ai didi

c# - 如何使用 Assert.Throws 断言异常类型?

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

如何使用 Assert.Throws 断言异常类型和实际消息措辞?

像这样:

Assert.Throws<Exception>(
()=>user.MakeUserActive()).WithMessage("Actual exception message")

我正在测试的方法抛出多条相同类型的消息,但消息不同,我需要一种方法来测试是否根据上下文抛出正确的消息。

最佳答案

Assert.Throws 返回抛出的异常,让您可以对异常进行断言。

var ex = Assert.Throws<Exception>(() => user.MakeUserActive());
Assert.That(ex.Message, Is.EqualTo("Actual exception message"));

所以如果没有抛出异常,或者抛出错误类型的异常,第一个Assert.Throws断言就会失败。但是,如果抛出正确类型的异常,那么您现在可以断言保存在变量中的实际异常。

通过使用此模式,您可以断言异常消息以外的其他内容,例如在 ArgumentException 和派生的情况下,您可以断言参数名称是正确的:

var ex = Assert.Throws<ArgumentNullException>(() => foo.Bar(null));
Assert.That(ex.ParamName, Is.EqualTo("bar"));

您还可以使用流畅的 API 来执行这些断言:

Assert.That(() => foo.Bar(null), 
Throws.Exception
.TypeOf<ArgumentNullException>()
.With.Property("ParamName")
.EqualTo("bar"));

或者替代地

Assert.That(
Assert.Throws<ArgumentNullException>(() =>
foo.Bar(null)
.ParamName,
Is.EqualTo("bar"));

断言异常消息时的一个小技巧是使用 SetCultureAttribute 修饰测试方法,以确保抛出的消息使用预期的文化。如果您将异常消息存储为允许本地化的资源,这就会发挥作用。

关于c# - 如何使用 Assert.Throws 断言异常类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1609536/

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