使用NUnit ir MeTest声明方法时如何捕获失败的声明异常消息或状态。
当我的断言失败时,我试图捕获“ AssertionException”,如何使用NUnit或MsTest捕获它。因为Assert方法不返回任何类型。我的要求是,即使断言获取未能完成剩余的断言,测试也应继续进行,应该捕获错误并使此断言失败。我正在使用下面的代码语句。当我使用Nunit框架时,即使我使用try .. catch块,它的失败和连续到下一个断言的购买也无法捕获,而在MsTest中,它失败了,使用try..catch块进行捕获,而不继续到下一个断言。 非常感谢您的帮助!
public static void ResponseValueAssert(dynamic actualValue, dynamic expectedValue, string nameOfAssert)
{
//var ex = Assert.Throws<AssertionException>(() =>
//Assert.AreEqual(expectedValue, actualValue, "Actual value doesn't match with Expected value {0}", nameOfAssert));
if (ResponseValueAssertImplicit(actualValue, expectedValue, nameOfAssert))
{
Console.WriteLine("\r\nResponse Assert:- {0}: <PASS>", nameOfAssert);
}
else
{
Console.WriteLine("\r\nResponse Assert:- {0}: <<FAIL>>", nameOfAssert);
Console.Error.WriteLine("\r\nResponse Assert:- {0}: <<FAIL>>", nameOfAssert);
// Assert.Fail();
}
Console.WriteLine("Expected Value: {0}.\r\nActual Value: {1}.", actualValue, expectedValue);
}
public static bool ResponseValueAssertImplicit(dynamic actualValue, dynamic expectedValue, string nameOfAssert)
{
try
{
Assert.AreEqual(expectedValue, actualValue, "Actual value doesn't match with Expected value {0}", nameOfAssert);
return true;
}
catch (AssertionException ex)
{
return false;
}
}
答案 0 :(得分:1)
将两个完全不同的软件作为一个问题问是没有用的。对于NUnit和MSTest来说,答案显然是不同的,这些天实现起来已经完全不同了。
所以我只回答关于NUnit的问题,因为我不知道您将如何使用MSTest。
在NUnit中,如果希望测试继续进行,以便可以在同一测试中报告多个断言,则可以使用多个断言。那是...
Assert.Multiple(() =>
{
// Put your various asserts here
};
NUnit将报告所有失败的断言。在该块的末尾,如果任何断言失败,则测试将终止。
请注意,许多人会说测试中有多个断言是一个坏主意。我相信大多数时候都是这样,但是在某些情况下(例如检查同一对象的多个属性)会很有用。
同样,为了记录,您应该从不捕获正在由测试框架内部使用的异常。它们基本上是隐藏的实现细节,在下一版软件中您的所有工作都可能会丢失……在这种情况下,某些人已经发生了这种情况。