【发布时间】:2010-09-11 22:05:22
【问题描述】:
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 表达式 或数组创建表达式 属性
有人知道如何测试包含来自资源文件的消息的异常吗?
我考虑过的一个选项是使用自定义异常类,但基于经常听到的建议,例如:
"创建并抛出自定义异常 如果您有错误情况 可以以编程方式处理 不同于任何其他现有的方式 例外。否则,抛出其中一个 现有异常。”Source
我不希望在正常流程中以不同的方式处理异常(这是一个严重异常,所以无论如何我都会进入恐慌模式),我不认为为每个测试用例创建一个异常是正确的做。有意见吗?
【问题讨论】:
-
message 参数没有根据抛出异常的消息进行检查。
标签: visual-studio unit-testing exception internationalization