Maison > développement back-end > C++ > Comment isoler « DateTime.Now » pour des tests unitaires efficaces ?

Comment isoler « DateTime.Now » pour des tests unitaires efficaces ?

Patricia Arquette
Libérer: 2025-01-12 08:10:42
original
886 Les gens l'ont consulté

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

Test unitaire : isoler DateTime.Now

Lors des tests unitaires, il est souvent nécessaire de contrôler l'heure actuelle sans changer l'horloge du système. Cela crée des défis lorsque le code s'appuie sur DateTime.Now.

La meilleure approche consiste à créer une couche d'abstraction autour de DateTime.Now. L'injection de cette abstraction dans le code testé permet de simuler l'heure actuelle lors des tests unitaires.

Alternative : Contexte environnemental

<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>
Copier après la connexion

Comment l'utiliser :

<code class="language-csharp">var now = TimeProvider.Current.UtcNow;</code>
Copier après la connexion

Dans les tests unitaires :

<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>
Copier après la connexion

Cependant, assurez-vous de nettoyer vos appareils de test en appelant TimeProvider.ResetToDefault() pour éviter d'interférer avec les tests suivants.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal