2010-06-23 3 views
2

어설 션이 실패한 경우에만 예외를 catch하지 않고 코드를 실행하는 NUnit에 후크가 있습니까? 기본적으로 어설 션이 실패하고 예외를 다시 throw 할 때 액션 위임을 받아 들여야합니다. 왜 내가 이것을 필요로합니까? 어설 션이 실패 할 때 디버깅을 쉽게하기 위해 두 객체를 비교하여 화면에 결과를 덤프해야합니다.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

은 아마 당신은 후크 업에 대한 필요성을 제거하는 대신 자신의'Assert' 기능을 쓸 수 있을까? – MEMark

답변

0

어떻게 대리인을 통해 수행 될지 모르겠습니다. 한 가지 대안은 비교 결과를 저장하는 것입니다. 결과가 false 인 경우, 객체의 내용을 작성하고 다음 Assert.Fail()를 호출

0

시도 - 캐치액션로 어설를 포장하는 possibilty 있습니다. 캐치에서 당신이 추가 비교 처리 할 수 ​​있습니다 발언으로

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)