>백엔드 개발 >C++ >효과적인 단위 테스트를 위해 `DateTime.Now`를 분리하는 방법은 무엇입니까?

효과적인 단위 테스트를 위해 `DateTime.Now`를 분리하는 방법은 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2025-01-12 08:10:42889검색

How to Isolate `DateTime.Now` for Effective Unit Testing?

단위 테스트: DateTime.Now 분리

단위 테스트를 할 때 시스템 시계를 변경하지 않고 현재 시간을 제어해야 하는 경우가 많습니다. 이로 인해 코드가 DateTime.Now를 사용할 때 문제가 발생합니다.

가장 좋은 접근 방식은 DateTime.Now 주위에 추상화 계층을 만드는 것입니다. 이 추상화를 테스트 중인 코드에 주입하면 단위 테스트 중에 현재 시간을 시뮬레이션할 수 있습니다.

대안: 환경적 맥락

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

    public static TimeProvider Current
    {
        get { return TimeProvider.current; }
        set 
        {
            if (value == null)
            {
                throw new ArgumentNullException("value");
            }
            TimeProvider.current = value; 
        }
    }

    public abstract DateTime UtcNow { get; }

    public static void ResetToDefault()
    {    
        TimeProvider.current = DefaultTimeProvider.Instance;
    }            
}</code>

사용방법:

<code class="language-csharp">var now = TimeProvider.Current.UtcNow;</code>

단위 테스트 중:

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

그러나 후속 테스트를 방해하지 않도록 TimeProvider.ResetToDefault()를 호출하여 테스트 픽스처를 정리해야 합니다.

위 내용은 효과적인 단위 테스트를 위해 `DateTime.Now`를 분리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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