NUnit中是否有钩子只在断言失败而没有捕获异常时才执行代码。基本上,它应该接受在断言失败时执行的动作委托,然后重新抛出异常。我为什么需要这个? 我需要比较两个对象并将结果转储到屏幕上,以便在断言失败时更容易调试。
这样的东西有效,但是是一个糟糕的黑客,问题是它急切地评估ProcessCompareError,所以我有不必要的开销,而且无论是否有错误都会这样做。那么,是否存在重载将接受在断言失败时将执行的委托?
Assert.That(benefitLimitComparer.Compare(copyBenefitLimit, origBenefitLimit), Is.EqualTo(0),limitError, ProcessCompareError(origBenefitLimit, copyBenefitLimit));
}
}
}
private string ProcessCompareError(BenefitLimit origBenefitLimit, BenefitLimit copyBenefitLimit)
{
Console.WriteLine("Original: ");
ObjectDumper.Write(origBenefitLimit);
Console.WriteLine("Copy");
ObjectDumper.Write(copyBenefitLimit);
return "";
}
答案 0 :(得分:0)
我不确定如何通过委托来完成。另一种方法是存储Compare的结果。如果结果为false,则写出对象的内容,然后调用Assert.Fail()
答案 1 :(得分:0)
将一个断言包装为 try-catch 中的 Action 是可能的。在 catch 中,您可以处理额外的比较:
public static void ExecuteAssert(Action assert)
{
if (assert == null) return;
try
{
assert();
}
catch (Exception ex)
{
// perform the compare
}
}
备注:如果某些非致命检查失败,我会使用类似的方法继续执行测试并避免整个测试停止。实际上我会迭代一些行动:
private static void VerifyAll(params Action[] asserts)