想象一下,您有一个检查提供的字符串值是否为空的函数,如下所示:
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,它停止执行,并且代码从不测试第二个异常。
我所做的没有成功的事情:
无论我做什么,MSTest总是报告第一个异常,当然我的测试失败。下面是我当前的测试代码:
[TestMethod]
public void When_Validating_SignInRequest_And_Email_IsEmpty_Raise_EmptyEmailException()
{
var ex = Assert.ThrowsException<EmptyEmailException>(
() => CheckEmail(string.Empty)
);
}
有人能指出我正确的方向吗?
谢谢。
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));
}
}
}