>백엔드 개발 >C++ >단위 테스트에서 DateTime.Now를 효과적으로 모의하려면 어떻게 해야 합니까?

단위 테스트에서 DateTime.Now를 효과적으로 모의하려면 어떻게 해야 합니까?

Barbara Streisand
Barbara Streisand원래의
2025-01-12 09:50:43929검색

How Can I Effectively Mock DateTime.Now in Unit Tests?

단위 테스트: 모의에서 DateTime.Now 극복

단위 테스트는 종종 특정 타임스탬프에 의존하지만 시스템 시간을 수정하는 것은 이상적이지 않을 수 있습니다. 이 문서에서는 DateTime.Now를 모의하는 효과적인 전략을 살펴봅니다.

추상화와 주입

선호되는 접근 방식은 현재 시간을 추상화(예: TimeProvider)로 캡슐화하여 소비자에게 주입하는 것입니다. 이를 통해 프로덕션 용도로 원래 구현을 유지하면서 테스트 중에 모의 TimeProvider를 대체할 수 있습니다.

환경적 맥락

또는 시간 추상화를 환경 컨텍스트로 정의할 수 있습니다. 이를 통해 시스템 시간을 직접 수정하지 않고도 현재 시간을 수정할 수 있습니다. 다음은 환경 컨텍스트 구현의 예입니다.

<code>public abstract class TimeProvider
{
    private static TimeProvider current = DefaultTimeProvider.Instance;

    public static TimeProvider Current
    {
        get { return current; }
        set { current = value; }
    }

    public abstract DateTime UtcNow { get; }
}</code>

이 맥락에서 TimeProvider.Current는 현재 시간을 나타냅니다. 테스트에 사용하려면 TimeProvider.Current를 모의 개체로 바꿀 수 있습니다.

<code>using Moq;

var timeMock = new Mock<TimeProvider>();
timeMock.SetupGet(tp => tp.UtcNow).Returns(new DateTime(2010, 3, 11));
TimeProvider.Current = timeMock.Object;</code>

이를 통해 단위 테스트는 프로덕션 코드에 영향을 주지 않고 특정 타임스탬프를 설정할 수 있습니다. 그러나 각 테스트 후에 시간 공급자를 기본 상태로 재설정하는 것을 기억하는 것이 중요합니다.

위 내용은 단위 테스트에서 DateTime.Now를 효과적으로 모의하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.