gpt4 book ai didi

c# - 如何使用 ExpectedException 属性强制执行异常消息

转载 作者:IT王子 更新时间:2023-10-29 04:08:53 27 4
gpt4 key购买 nike

我认为这两个测试的行为应该相同,事实上我已经在我的项目中使用 MS Test 编写了测试,现在才发现它不像 NUnit 那样遵守预期的消息。

NUnit(失败):

[Test, ExpectedException(typeof(System.FormatException), ExpectedMessage = "blah")]
public void Validate()
{
int.Parse("dfd");
}

MS 测试(通过):

[TestMethod, ExpectedException(typeof(System.FormatException), "blah")]
public void Validate()
{
int.Parse("dfd");
}

无论我给 ms 测试什么消息,它都会通过。

如果消息不正确,是否有任何方法可以使 ms 测试失败?我什至可以创建自己的异常属性吗?我宁愿不必为发生这种情况的每个测试都编写一个 try catch block 。

最佳答案

我们到处都在使用这个属性,而我们显然误解了第二个参数(我们感到羞耻)。

但是,我们肯定用过它来检查异常消息。以下是我们与此页面的提示一起使用的内容。它不处理全局化或继承的异常类型,但它可以满足我们的需要。同样,目标是简单地 RR 'ExpectedException' 并将其与此类交换。 (Bummer ExpectedException 被密封了。)

public class ExpectedExceptionWithMessageAttribute : ExpectedExceptionBaseAttribute
{
public Type ExceptionType { get; set; }

public string ExpectedMessage { get; set; }

public ExpectedExceptionWithMessageAttribute(Type exceptionType)
{
this.ExceptionType = exceptionType;
}

public ExpectedExceptionWithMessageAttribute(Type exceptionType, string expectedMessage)
{
this.ExceptionType = exceptionType;
this.ExpectedMessage = expectedMessage;
}

protected override void Verify(Exception e)
{
if (e.GetType() != this.ExceptionType)
{
Assert.Fail($"ExpectedExceptionWithMessageAttribute failed. Expected exception type: {this.ExceptionType.FullName}. " +
$"Actual exception type: {e.GetType().FullName}. Exception message: {e.Message}");
}

var actualMessage = e.Message.Trim();
if (this.ExpectedMessage != null)
{
Assert.AreEqual(this.ExpectedMessage, actualMessage);
}

Debug.WriteLine($"ExpectedExceptionWithMessageAttribute:{actualMessage}");
}
}

关于c# - 如何使用 ExpectedException 属性强制执行异常消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4710129/

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