断言从NUnit到MS测试的异常
我在一些测试中检查异常中的参数名。 我如何在MS测试中编写这个断言从NUnit到MS测试的异常,nunit,mstest,Nunit,Mstest,我在一些测试中检查异常中的参数名。 我如何在MS测试中编写这个 ArgumentNullException异常= 断言。抛出( ()=>新的NHibernateLawbaseCaseDataLoader( 无效的 _mockExRepository, _mockben(存储库); AreEqual(“lawbaseFixedContactRepository”,exception.ParamName); 我一直希望有一种更整洁的方式,这样我就可以避免在测试中使用try-catch块 由于MST
ArgumentNullException异常=
断言。抛出(
()=>新的NHibernateLawbaseCaseDataLoader(
无效的
_mockExRepository,
_mockben(存储库);
AreEqual(“lawbaseFixedContactRepository”,exception.ParamName);
我一直希望有一种更整洁的方式,这样我就可以避免在测试中使用try-catch块 由于MSTest
[ExpectedException]
属性不检查消息中的文本,因此最好尝试捕获异常消息/ParamName属性并设置断言。公共静态类异常Assert
{
公共静态T抛出(Action-Action),其中T:Exception
{
尝试
{
动作();
}
渔获物(T-ex)
{
退换货;
}
Assert.Fail(“类型{0}”的预期异常,类型(T));
返回null;
}
}
您可以使用上面的扩展方法作为测试助手。下面是一个如何使用它的示例:
//测试方法
var exception=ExceptionAssert.Throws(
()=>organizations.GetOrganization());
AreEqual(“lawbaseFixedContactRepository”,exception.ParamName);
无耻的插件,但我编写了一个简单的程序集,使用nUnit/xUnit风格的Assert.Throws()语法,在MSTest中断言异常和异常消息变得更容易和更可读
您可以使用以下命令从Nuget下载该软件包:PM>安装软件包MSTestExtensions
或者您可以在此处查看完整的源代码:
高级指令,下载程序集并从BaseTest继承,您可以使用Assert.Throws()语法
抛出实现的主要方法如下所示:
public static void Throws<T>(Action task, string expectedMessage, ExceptionMessageCompareOptions options) where T : Exception
{
try
{
task();
}
catch (Exception ex)
{
AssertExceptionType<T>(ex);
AssertExceptionMessage(ex, expectedMessage, options);
return;
}
if (typeof(T).Equals(new Exception().GetType()))
{
Assert.Fail("Expected exception but no exception was thrown.");
}
else
{
Assert.Fail(string.Format("Expected exception of type {0} but no exception was thrown.", typeof(T)));
}
}
publicstaticvoid抛出(Action任务、stringexpectedmessage、ExceptionMessageCompareOptions选项),其中T:Exception
{
尝试
{
任务();
}
捕获(例外情况除外)
{
资产异常类型(ex);
AssertExceptionMessage(例如,expectedMessage、options);
返回;
}
if(typeof(T).Equals(newexception().GetType()))
{
Assert.Fail(“预期异常,但未引发异常”);
}
其他的
{
Assert.Fail(string.Format(“类型为{0}的预期异常,但未引发任何异常。”,typeof(T));
}
}
更多信息。我没有什么可以提供的,但我很感激你的帮助!我希望你没有因为我的评论而生气。虽然我在SO方面的专业知识完全不同,但我会尽可能编辑网站,并鼓励像你这样的人发布更高质量的答案,以此来回报网站。所有这些加在一起就构成了一个对其他人来说更有价值的网站。在您的第二个代码块中,检查异常不是更正确吗!=null?您可以为其余的异常添加另一个catch块,并说“预期的异常是abc,但得到了xyz”。