gpt4 book ai didi

visual-studio - 如何使用 Visual Studio Test 中的资源文件中的特定异常消息来测试预期异常?

转载 作者:行者123 更新时间:2023-12-03 07:23:33 24 4
gpt4 key购买 nike

Visual Studio Test 可以使用 ExpectedException 属性检查预期异常。您可以传入这样的异常:

[TestMethod]
[ExpectedException(typeof(CriticalException))]
public void GetOrganisation_MultipleOrganisations_ThrowsException()

您还可以检查 ExpectedException 中包含的消息,如下所示:

[TestMethod]
[ExpectedException(typeof(CriticalException), "An error occured")]
public void GetOrganisation_MultipleOrganisations_ThrowsException()

但是在测试 I18N 应用程序时,我会使用资源文件来获取该错误消息(如果我愿意,任何人甚至可能决定测试错误消息的不同本地化,但 Visual Studio 不会让我这样做:

[TestMethod]
[ExpectedException(typeof(CriticalException), MyRes.MultipleOrganisationsNotAllowed)]
public void GetOrganisation_MultipleOrganisations_ThrowsException()

编译器会报如下错误:

An attribute argument must be a constant expression, typeof expression or array creation expression of an attribute

有人知道如何测试具有来自资源文件的消息的异常吗?

<小时/>

我考虑过的一个选择是使用自定义异常类,但基于经常听到的建议,例如:

"Do create and throw custom exceptions if you have an error condition that can be programmatically handled in a different way than any other existing exception. Otherwise, throw one of the existing exceptions." Source

我不希望在正常流程中以不同的方式处理异常(这是一个关键异常,所以无论如何我都会进入 panic 模式)并且我不认为为每个测试用例创建异常是正确的事情做。有意见吗?

最佳答案

我建议使用辅助方法而不是属性。像这样的事情:

public static class ExceptionAssert
{
public static T Throws<T>(Action action) where T : Exception
{
try
{
action();
}
catch (T ex)
{
return ex;
}
Assert.Fail("Exception of type {0} should be thrown.", typeof(T));

// The compiler doesn't know that Assert.Fail
// will always throw an exception
return null;
}
}

然后你可以编写如下测试:

[TestMethod]
public void GetOrganisation_MultipleOrganisations_ThrowsException()
{
OrganizationList organizations = new Organizations();
organizations.Add(new Organization());
organizations.Add(new Organization());

var ex = ExceptionAssert.Throws<CriticalException>(
() => organizations.GetOrganization());
Assert.AreEqual(MyRes.MultipleOrganisationsNotAllowed, ex.Message);
}

这还有一个好处,它可以验证异常是否是在您期望抛出异常的行上引发的,而不是在测试方法中的任何位置引发的。

关于visual-studio - 如何使用 Visual Studio Test 中的资源文件中的特定异常消息来测试预期异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/113395/

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