TDD : NUnit 2.5의 새로운 기능 : Asserts 관련 CSharp

초보자들에게 Unit Test 코드를 작성해 보라고 하면, 테스트 시나리오 작성부터 헤메기 시작합니다. (논리력이 부족하다는 증거겠죠)
또 하나는 테스트 수행 후의 검증 작업을 못한다는 겁니다. 거의 모든 개발자가 Console.WriteLine 을 이용하여 테스트 결과를 사람이 눈으로 확인하도록 코드를 작성한다는 얘기입니다.

초보자 여러분 생각해봅시다. Unit Test라는게 뒤에 Automation이란 단어가 생략되어서 그렇습니까? 사실 단위 테스트 자동화라고 한다면, Console.WriteLine을 사용하시겠습니까? 
"자동화" 라면 테스트 수행 결과에 대해 스스로 검증할 수 있도록 코드를 작성해야겠지요? 

모든 Unit Test Framework에는 테스트에 대한 검증을 위해 Assert 라는 클래스를 제공합니다.
가장 많이 쓰이는 기능이 Assert.AreEqual( object expected, object actual ) 일 것입니다. 

NUnit도 이러한 Assertion과 관련된 많은 class와 메소드를 제공합니다.

기본적으로 Assert class에서 제공하는 method들을 보면

값 비교, 검증을 위한 메소드
AreEqual, AreSame, Contains , 

Conditional assert
True, IsTrue, False, IsFalse, Null, IsNull, IsNotNull, IsEmpty, IsNotEmpty, IsNaN,

비교
Greater, GreaterOrEqual, Less, LessOrEqual

Type 검사
IsInstanceOfType, IsNotInstanceOfType, IsAssignableFrom, IsNotAssignableFrom
IsInstanceOf<T>, IsNotInstanceOf<T>, IsAssignableFrom<T>, IsNotAssignableFrom<T>

Exception 처리를 위한 메소드
Throws, Throws<T>, DoesNotThrow

Utility methods
Pass, Fail, Ignore, Inconclusive

특별한 Assertion class
StringAssert, CollectionAssert, FileAssert, DirectoryAssert

----------------------------------------------------------

다음으로는 NUnit 2.4부터 도입된 Constraint-based Assert Model 입니다.

Constraint 종류는 Equal, SameAs, Conditional, Comparison, Path, Type, String, Collection, Property, Throws, Compound, Delayed, List Mapper 등이 있습니다.

모든 constraint는 하나의 표현식으로 표현되고, Assert.That() 메소드로 검증을 수행하는 방식입니다.

Equal Constraint 예제부터 보시면

  Assert.That (2 + 2, IsEqualTo(4.0));
  Assert.That ( 5.5, IsEqualTo(5).Within(0.075));
  Assert.That ( 5.5, IsEqualTo(5).Within(1.5).Percent);

나머지 자료는 도움말을 참고하세요.