代码之家  ›  专栏  ›  技术社区  ›  epitka

NUnit:在断言失败挂钩时执行代码

  •  2
  • epitka  · 技术社区  · 14 年前

    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 "";
            }
    
    2 回复  |  直到 14 年前
        1
  •  0
  •   Pedro    14 年前

    我不知道如何通过代表来完成。另一种方法是存储比较的结果。如果结果为false,则写出对象的内容,然后调用Assert.Fail()

        2
  •  0
  •   Marc Sputnik    8 年前

    行动 试接球 抓住 您可以处理其他比较:

        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)