DateTime.Now
: 모범 사례단위 테스트에서는 다양한 시나리오를 시뮬레이션하기 위해 시스템 시간을 제어해야 하는 경우가 많습니다. 시스템 시계를 직접 변경하는 것은 비실용적이며 위험합니다. 해결책은 종속성 주입과 추상화에 있습니다.
핵심은 시간 소스를 추상화하여 코드에 삽입하는 것입니다. 이를 통해 테스트 중에 실시간 공급자를 모의 공급자로 쉽게 대체할 수 있습니다.
인터페이스를 만들어 보겠습니다.
<code class="language-csharp">interface ITimeProvider { DateTime UtcNow { get; } }</code>
이 인터페이스는 현재 UTC 시간을 얻기 위한 계약을 정의합니다. 기본 클래스로 구현하겠습니다.
<code class="language-csharp">class DefaultTimeProvider : ITimeProvider { public DateTime UtcNow => DateTime.UtcNow; }</code>
이제 종속 클래스에서 이것을 사용해 보겠습니다.
<code class="language-csharp">class MyDependentClass { private readonly ITimeProvider _timeProvider; public MyDependentClass(ITimeProvider timeProvider) { _timeProvider = timeProvider; } public void MyMethod() { var currentTime = _timeProvider.UtcNow; // ... use currentTime ... } }</code>
테스트에서 미리 결정된 ITimeProvider
값을 반환하는 모의 DateTime
를 삽입하여 테스트 내에서 시간을 완벽하게 제어할 수 있습니다.
또는 주변 컨텍스트를 사용할 수도 있습니다.
<code class="language-csharp">public static class TimeContext { private static ITimeProvider _current = new DefaultTimeProvider(); public static ITimeProvider Current { get => _current; set => _current = value; } }</code>
전 세계적으로 접근 가능한 시간 제공자를 제공합니다. 테스트에서 임시로 TimeContext.Current
을 모의로 설정할 수 있으며, 부작용을 방지하려면 각 테스트 후에 기본값으로 복원하는 것을 기억하세요.
기억하세요: 후속 테스트나 애플리케이션 자체에서 의도하지 않은 결과를 방지하려면 각 테스트 후에 주변 컨텍스트를 정리하세요. 이러한 목적으로 using
문이나 finally
블록을 사용하는 것이 좋습니다.
위 내용은 `DateTime.Now`에 의존하는 단위 테스트 코드를 효과적으로 효과적으로 수행하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!