MSTest可以忽略嵌套的异常,仅对最后一个进行测试吗?

问题描述 投票:0回答:1

想象一下,您有一个检查提供的字符串值是否为空的函数,如下所示:

string IsNotEmpty(string value)
{
    if (!string.IsEmpty(value)) return value
    else throw new Exception("Value is empty");
}

还可以想象,我们代码的许多其他部分都调用此泛型函数来检查是否存在值,如果不存在,则抛出比泛型函数更具体的异常。作为示例,我将提供以下代码:

string CheckEmail(string email)
{
    try
    {
        return IsNotEmpty(email);
    }
    catch(Exception ex)
    {
        throw new **EmptyEmailException**("Please provide your email");
    }
}

现在,我想为CheckEmail函数编写一个MSTest,它期望引发类型为EmptyEmailException的异常。但是不幸的是,该测试仅从IsNotEmpty函数捕获通用Exception,它停止执行,并且代码从不测试第二个异常。

我所做的没有成功的事情:

  1. 我编写了带有ExpectedException属性的测试。
  2. 我写了我的测试与Assert.ThrowsException。
  3. 我更新了VS中的异常设置不要刹车异常类型,只是看看是否将解决我的问题。

无论我做什么,MSTest总是报告第一个异常,当然我的测试失败。下面是我当前的测试代码:

[TestMethod]
public void When_Validating_SignInRequest_And_Email_IsEmpty_Raise_EmptyEmailException()
{
    var ex = Assert.ThrowsException<EmptyEmailException>(
                () => CheckEmail(string.Empty)
            );
}

有人能指出我正确的方向吗?

谢谢。

mstest
1个回答
0
投票
这对我来说很好:

using Microsoft.VisualStudio.TestTools.UnitTesting; using System; namespace MyNamespace { public class EmptyEmailException : Exception { public EmptyEmailException(string message) : base(message) { } } public class MyClass { public static string IsNotEmpty(string value) { if (!string.IsNullOrEmpty(value)) return value; else throw new Exception("Value is empty"); } public static string CheckEmail(string email) { try { return IsNotEmpty(email); } catch { throw new EmptyEmailException("Please provide your email"); } } } [TestClass] public class UnitTest1 { [TestMethod] public void TestMethod1() { Assert.ThrowsException<EmptyEmailException>(() => MyClass.CheckEmail(string.Empty)); } } }

© www.soinside.com 2019 - 2024. All rights reserved.