2012-03-16 3 views
1

날짜에 따른 기능에 대한 승인/통합 테스트를 어떻게 할 수 있습니까?날짜 이벤트에 따라 기능을 테스트하는 방법은 무엇입니까?

간단히하기 위해이 기능을 가정 해 봅니다. 폴더를 모니터링하고받은 파일에 해당하는 ListView에 항목을 추가합니다. 목록보기 항목의 색상은받은 날짜에 따라 다릅니다. 예를 들어 일요일에 수신되는 경우 빨간색, 월요일, 파란색 등입니다.

주일에 실행할 필요없이이 기능에 대한 테스트 코드를 만들려면 어떻게해야합니까? 테스트 코드가 시스템 날짜를 수정해야합니까 (그러나 이것이 테스트 프레임 워크 및 보고서에서 이상하게 들릴 까봐 두렵습니다)? 자세한 내용은 응용 프로그램이 .net이고 개발자가 DateTime.Now를 사용하여 수신 시간을 가져옵니다.

이것은 단위 테스트가 아니며 사용자 상호 작용을 모방하는 수용 테스트입니다.

답변

2
  • 인터페이스가 필요없이 DateTime.Now가 반환하는 것을 스터핑 할 수있는 Fake Framework를 사용해야합니다. 그렇지 않으면 TypeMock
  • 처럼, 당신은 클래스를 만들 수 있습니다, 당신은
  • 그렇지 않으면 (단지 당신의 코드를 테스트하기 위해 수행되는으로는이 경우에 덜 바람직하다) 날조보다 효율적으로 제어 할 자신의 Date 객체를 만들 수 있습니다 그것은 당신이 스터핑 할 수있는 GetCurrentDate 메소드를 가지고 있습니다. 귀하의 prod 구현에서 DateTime.Now를 사용할 수 있지만, 테스트에서, 당신은 원하는 날짜를 반환하도록 그것을 스텁 (stub) 할 수 있습니다. 이것은 아마도 IMO

그러나,이 전체, 실제 구현을 테스트하지 않습니다 최선의 해결책이며, 단위 테스트의 더 많은 것이다. 엔드 투 엔드 통합 테스트에 대해 실제로 말하면, 그렇습니다. 시스템 시간을 수정해야합니다.

0

필요한 것은 DateTime 인터페이스를 "조롱하는"방법입니다. 즉, DateTime이 현재 시간이 아닌 미리 결정된 값을 반환하도록하는 것입니다. 그것은 수용 테스트의 경우

Which .NET Dependency Injection frameworks are worth looking into?

+0

하지만 이것은 단위 테스트가 아닌 수용 테스트입니다. 이미 컴파일 된 .exe에 종속성을 주입하려면 어떻게해야합니까? –

0

"의존성 주입"(DI) 및 DI를 수행하기위한 프레임 워크의 수로서 공지 된 기존의 것을 교체하는 모의 클래스 "주입"의 과정에서 논의 사용자 상호 작용이 필요하므로 시스템 시간을 변경하는 것이 가장 좋습니다.

단위 테스트의 경우 종속성 (DateTime)을 테스트 할 메서드로 전달해야합니다.

관련 문제