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()
编译器将给出以下错误:
属性参数必须是属性的常量表达式、typeof 表达式或数组创建表达式
有人知道如何测试具有来自资源文件的消息的异常吗?
我考虑过的一种选择是使用自定义异常类,但基于经常听到的建议,例如:
“如果您的错误条件可以以与任何其他现有异常不同的方式以编程方式处理,请创建并抛出自定义异常。否则,抛出现有异常之一。” 来源
我不希望在正常流程中以不同的方式处理异常(这是一个严重的异常,所以无论如何我都会进入恐慌模式),我不认为为每个测试用例创建一个异常是正确的做法。有什么意见吗?