【问题标题】:In MSTests is it possible to catch any exception?在 MSTests 中是否可以捕获任何异常?
【发布时间】:2010-02-02 15:33:20
【问题描述】:

我试图避免一个脆弱的测试。我想断言一个方法在传入无效数据时会抛出异常,我不在乎是哪个。

以 String.IsNullOrEmpty 为例,如果字符串为空,你不想抛出空引用异常对吧?如果它是空的,我想你可以抛出一个argumentException。我不认为为 null 和 empty 设置单独的保护子句是一个好主意,而且无论如何我都希望能够断言我的单元抛出了异常。

使用[ExpectedException(typeof(Exception))] 会报错,指出异常类型必须继承自异常。如果没有抛出异常,我的解决方案是带有 Assert.Fail 的 try/catch 块。有没有更好/更清洁的方法?

【问题讨论】:

    标签: unit-testing mstest


    【解决方案1】:

    看起来尝试捕获是断言抛出通用异常的唯一选择。这是 MSDN 上有关此主题的主题:

    http://social.msdn.microsoft.com/Forums/en/vststest/thread/ed891a27-272c-4938-9a93-719c149d820e

    我仍然会质疑断言通用异常的必要性。如果您正在测试特定场景,您应该知道应该抛出什么异常。对于您使用string.IsNullOrEmpty() 的示例,您似乎需要同时测试空字符串和空值。如果空字符串是无效输入,那么抛出 ArgumentException 似乎是合理的,您可以针对特定异常进行测试。如果字符串是有效输入,那么您可以测试以确保它没有抛出异常。

    【讨论】:

    • 我想我可以看到捕获特定异常的优点,在这种情况下,我最感兴趣是因为我不知道如何很好地处理字符串 null(null 引用异常? ) vs string empty (argumentexception) 范例,并认为忽略异常类型并确保在这种情况下引发异常会很好。使测试不那么脆弱,但冒着测试因错误原因失败的风险。我认为其他测试会抓住“其他原因”
    • 如果测试因错误的原因而失败,它会不会很脆弱?测试肯定会不那么“可信”。
    猜你喜欢
    • 2018-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-06
    • 1970-01-01
    • 2011-03-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多