断言从NUnit到MS测试的异常

断言从NUnit到MS测试的异常,nunit,mstest,Nunit,Mstest,我在一些测试中检查异常中的参数名。 我如何在MS测试中编写这个 ArgumentNullException异常= 断言。抛出( ()=>新的NHibernateLawbaseCaseDataLoader( 无效的 _mockExRepository, _mockben(存储库); AreEqual(“lawbaseFixedContactRepository”,exception.ParamName); 我一直希望有一种更整洁的方式,这样我就可以避免在测试中使用try-catch块 由于MST

我在一些测试中检查异常中的参数名。 我如何在MS测试中编写这个

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”。