Heim > Backend-Entwicklung > C++ > Wie kann ich DateTime.Now in Unit-Tests effektiv verspotten?

Wie kann ich DateTime.Now in Unit-Tests effektiv verspotten?

Barbara Streisand
Freigeben: 2025-01-12 09:50:43
Original
883 Leute haben es durchsucht

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

Unit-Tests: DateTime.Now in Mocks überwinden

Unit-Tests basieren oft auf bestimmten Zeitstempeln, aber die Änderung der Systemzeit ist möglicherweise nicht ideal. In diesem Artikel werden effektive Strategien zum Spotten von DateTime.Now untersucht.

Abstraktion und Injektion

Der bevorzugte Ansatz besteht darin, die aktuelle Zeit in einer Abstraktion (z. B. TimeProvider) zu kapseln und in den Verbraucher einzuspeisen. Dadurch können Sie einen simulierten TimeProvider während des Testens ersetzen und gleichzeitig die ursprüngliche Implementierung für den Produktionseinsatz beibehalten.

Umweltkontext

Alternativ können Sie eine Zeitabstraktion als Umgebungskontext definieren, der es Ihnen ermöglicht, die aktuelle Zeit zu ändern, ohne die Systemzeit direkt zu ändern. Hier ist ein Beispiel für eine Umgebungskontextimplementierung:

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

In diesem Zusammenhang repräsentiert TimeProvider.Current die aktuelle Zeit. Um es in Tests zu verwenden, können Sie TimeProvider.Current durch ein Scheinobjekt ersetzen:

<code>using Moq;

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

Dadurch können Unit-Tests bestimmte Zeitstempel festlegen, ohne den Produktionscode zu beeinträchtigen. Es ist jedoch wichtig, daran zu denken, den Zeitgeber nach jedem Test auf seinen Standardzustand zurückzusetzen.

Das obige ist der detaillierte Inhalt vonWie kann ich DateTime.Now in Unit-Tests effektiv verspotten?. 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