Heim > Backend-Entwicklung > C++ > Wie isoliert man „DateTime.Now' für effektive Unit-Tests?

Wie isoliert man „DateTime.Now' für effektive Unit-Tests?

Patricia Arquette
Freigeben: 2025-01-12 08:10:42
Original
887 Leute haben es durchsucht

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

Unit-Test: DateTime.Now isolieren

Bei Unit-Tests ist es oft notwendig, die aktuelle Zeit zu kontrollieren, ohne die Systemuhr zu ändern. Dies führt zu Herausforderungen, wenn Code auf DateTime.Now basiert.

Der beste Ansatz besteht darin, eine Abstraktionsschicht um DateTime.Now herum zu erstellen. Durch das Einfügen dieser Abstraktion in den zu testenden Code können Sie die aktuelle Zeit während Unit-Tests simulieren.

Alternative: Umweltkontext

<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>
Nach dem Login kopieren

So verwenden Sie es:

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

In Unit-Tests:

<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>
Nach dem Login kopieren

Bereinigen Sie jedoch unbedingt Ihre Testvorrichtungen, indem Sie TimeProvider.ResetToDefault() aufrufen, um eine Beeinträchtigung nachfolgender Tests zu vermeiden.

Das obige ist der detaillierte Inhalt vonWie isoliert man „DateTime.Now' für effektive Unit-Tests?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage