2010-06-02 3 views
0

많은 DateTime 유효성 검사를 수행하는 시스템의 일부와 '지금 완료되었거나'한 시간 후에 시작될 것 '이 많은 부분을 만들기 시작합니다. 갈내 '지금'/ DateTime.Now를 어떻게 작성해야합니까?

일반적인 방법은 실제 시간를 얻을 수 DateTime.Now을 사용하는 것입니다.

그러나 유닛 테스트 중에 테스트가 기본 테스트 데이터 집합을 사용하는 대신 실행될 시간에 내 테스트 데이터를 설정해야하기 때문에 단위 테스트 중에 실제 두통을 겪을 수 있습니다. 그래서 나는 생각 : 왜 내 현재 '시간'을 설정할 수 있도록 '지금'내 자신을 사용하지 마십시오. 나는 testservers 내부 시계를 설정하고 싶지 않기 때문에이 솔루션에 대해 생각하고 있었고, 나는 당신이 그것을 어떻게 생각하는지 궁금해했다. 기본 생각은 내 자신의 DateTime 클래스를 사용한다는 것입니다. 이 클래스는 현재 datetime을 제공하지만 외부에서 자신의 시간을 설정할 수도 있습니다.

public static class MyDateTime 
    { 
     private static TimeSpan _TimeDifference = TimeSpan.Zero; 
     public static DateTime Now 
     { 
      get 
      { 
       return DateTime.Now + _TimeDifference; 
      } 
     } 
     public static void SetNewNow(DateTime newNow) 
     { 
      _TimeDifference = newNow - DateTime.Now; 
     } 
     public static void AddToRealTime(TimeSpan timeSpan) 
     { 
      _TimeDifference = timeSpan; 
     } 
     public static void SubtractFromRealTime(TimeSpan timeSpan) 
     { 
      _TimeDifference = - timeSpan; 
     } 
    } 
+0

Framework의 DateTime 기본 제공 메서드에는 어떤 문제가 있습니까? –

+0

가능한 중복 : http://stackoverflow.com/questions/2425721/unit-testing-datetime-now –

+0

'MyDateTime'이라고 부르는 것을 피하고'DateTime '을 실수하기 쉽고, 더 쉽게 호출 할 수 있습니다. 드러내다. –

답변

3

몇 시간 전 이미 그것에 대해 읽었습니다. 에 대한 짧은 검색으로 즐겨 찾는 검색 엔진을 사용하는 DateTime.Now에 충분한 링크가 있어야합니다. http://blog.typemock.com/2009/05/mockingfaking-datetimenow-in-unit-tests.html

+0

은 유료 제품이 아닙니까? 그 외에도, 나는 약간의 기능을 구현할 수있는 전혀 새로운 프레임 워크를 구현/사용하는 데 다소 저항합니다. – Michel

0

u는 무엇을 의미합니까 :

이것은 매우 흥미로운 보는 것 같다? 전문화가 필요한 경우 Extension 메서드를 사용할 수 있습니다! 은 DateTime 클래스의 확장 메서드를 쉽게 작성하고 필요한 모든 작업을 수행합니다.

+0

그게 사실이지만, 또한 확장 메서드는 몇 가지 코드가 있어야합니까? – Michel

관련 문제