2013-08-14 1 views
1

나는 무엇을 테스트하고 무엇을 테스트하지 않는지에 대한 이해를 얻으 려합니다.단위 테스트 - 테스트 할 대상/테스트하지 않을 대상은 무엇입니까?

public static class Enforce 
{ 
    public static void ArgumentNotNull<T>(T argument, string name) 
    { 
     if (name == null) 
      throw new ArgumentNullException("name"); 

     if (argument == null) 
      throw new ArgumentNullException(name); 
    } 
} 

는 다음과 같은 테스트가 좋다고 말할 것이 매우 간단한 유틸리티 클래스 감안할 때

? 아니면 유효한 인수가 실제로 던지지 않는 역방향 조건을 테스트해야합니까?

[Fact] 
    public void ArgumentNotNull_ShouldThrow_WhenNameIsNull() 
    { 
     string arg = "arg"; 
     Action a =() => Enforce.ArgumentNotNull(arg, null); 

     a.ShouldThrow<ArgumentNullException>(); 
    } 

    [Fact] 
    public void ArgumentNotNull_ShouldThrow_WhenArgumentIsNull() 
    { 
     string arg = null; 
     Action a =() => Enforce.ArgumentNotNull(arg, "arg"); 

     a.ShouldThrow<ArgumentNullException>(); 
    } 

일반적으로 반대 조건을 테스트해야합니까? 아니면이 경우 가정하는 것이 안전할까요?

xUnit 및 FluentAssertions를 사용하고 있습니다.

답변

1

단위 테스트의 요점은 작성한 코드를 테스트하는 것입니다. ArgumentNullException은 사용하는 API의 일부이므로 주어진 기대에 따라 동작하는지 여부를 테스트하는 것은 API가 아니라 코드를 테스트하는 것이며 진흙 투성이 물일뿐입니다.

단위 테스트에서는 작성한 코드에 대해 작성한 메서드의 모든 동작을 테스트하므로 충분합니다.