2012-02-22 2 views
1

에서 보낸 객체 내가 이벤트 핸들러과 같이이 있다고 가정하자? 내가 보낸 사람이 항상 MyClass에 될 것이라는 점을 알고 있지만 난 그냥 내가 필요한 것입니다 안전을 위해 생각 : 유형이 아닌 MyClass에있다단위 테스트 핸들러

if (myObj != null) //Close it 

경우 myObj로는 null이됩니다. 내가 null이 아닌지 테스트하는 최선의 방법을 알기 때문에 단위 테스트를 작성하여 MyClass가 아닌 다른 유형의 보낸 사람이 DoSomethingImportant를 호출 할 때 null 체크가 필요하다는 것을 증명할 수 있습니까?

+1

if (myobj == null) ... – Lloyd

+0

@Lloyd 여전히 메서드를 호출 할 수 있도록 보낸 사람을 캐스팅해야합니다. – Jon

+1

기본적으로 테스트를 요청하고 있습니다. 'as'가해야할 일을하는지 여부 - IMHO C#이 문서화 된 방식대로 작동하는지 여부에 관계없이 "단위 테스트"를 수행 할 필요는 없습니다. 'as'는 사용자가 캐스팅하려는 객체가 해당 클래스 또는 해당 클래스의 하위 유형이 아니면 단순히 캐스팅하지 않습니다. 정말로 'as'를 사용하여 안전하게 형변환하는 코드를 작성하거나 'is'키워드를 사용하여 직접 유형을 테스트하십시오. 또는 이벤트 처리기는 클래스의 메서드 일뿐 아니라 모든 클래스와 마찬가지로 테스트를 작성합니다. –

답변

4

당신이 할 수있는 것을 지적하기 위해 의사 코드로 답할 수 있습니다.

먼저 발신자가 MyClass 유형인지 확인할 수 있습니다.

if(sender is MyClass) 

는 그런 다음 유닛 테스트에서 두 mock 객체를 입력 MyClass에의 한 또 다른 유형 "MyClassFake"중 하나에 보낼 수 있습니다. 인터페이스를 사용하고 Close() 메소드를 구현하도록 만듭니다.

  1. 검증 MyClass.Close()가 호출된다 :

    두 unittests를 확인합니다.

  2. MyClassFake.Close()가 호출되지 않는다는 것을 확인합니다.

Close() 메서드는 다른 메서드가 있으면 호출 된/호출되지 않은 메서드를 테스트 할 수 있습니다.