Visual Studio Test可以使用ExpectedException属性检查预期的异常.您可以传递这样的异常:
[TestMethod]
[ExpectedException(typeof(CriticalException))]
public void GetOrganisation_MultipleOrganisations_ThrowsException()
Run Code Online (Sandbox Code Playgroud)
您还可以检查ExpectedException中包含的消息,如下所示:
[TestMethod]
[ExpectedException(typeof(CriticalException), "An error occured")]
public void GetOrganisation_MultipleOrganisations_ThrowsException()
Run Code Online (Sandbox Code Playgroud)
但是在测试I18N应用程序时,我会使用资源文件来获取该错误消息(如果我愿意,任何人甚至可能决定测试错误消息的不同本地化,但Visual Studio不允许我这样做:
[TestMethod]
[ExpectedException(typeof(CriticalException), MyRes.MultipleOrganisationsNotAllowed)]
public void GetOrganisation_MultipleOrganisations_ThrowsException()
Run Code Online (Sandbox Code Playgroud)
编译器将给出以下错误:
属性参数必须是属性的常量表达式,typeof表达式或数组创建表达式
有人知道如何测试具有资源文件消息的异常吗?
我考虑过的一个选项是使用自定义异常类,但基于经常听到的建议,例如:
"如果您有一个错误条件,可以以与任何其他现有异常不同的方式以编程方式处理,则创建并抛出自定义异常.否则,抛出一个现有异常." 资源
我不希望在正常流程中以不同方式处理异常(这是一个关键的例外,所以我无论如何都要进入恐慌模式)并且我认为为每个测试用例创建一个例外是不对的.任何意见?