Je me demande si quelqu'un a trouvé une bonne solution à cela:
Dans nos tests unitaires; nous utilisons couramment Assert.AreEqual()
pour valider nos résultats. Tout va bien; jusqu'à ce que nous commencions à essayer de l'utiliser sur les propriétés DateTime.
Bien que les temps soient très similaires, ils sont parfois décalés de quelques millisecondes, ce qui entraîne l'échec des tests. Dans notre application; tant qu'ils sont précis à la seconde près; c'est assez bon pour nous.
Quelqu'un a-t-il trouvé un bon moyen de mettre en œuvre les tolérances dans ce cas? Généralement, notre solution consiste à le diviser en 2 instructions distinctes; un qui vérifie la .ToShortDateString()
, et un autre qui vérifie .ToShortTimeString()
, mais cela semble bâclé à mon avis.
Vous pouvez vérifier les tolérances avec quelque chose comme:
Debug.Assert((date1 - date2) < TimeSpan.FromSeconds(1));
Si vous n'êtes pas sûr de la date la plus récente, utilisez
Debug.Assert(Math.Abs((date1 - date2).TotalSeconds) < 1)
NUnit a également ajouté un support intégré pour cela en utilisant le mot clé Within
DateTime now = DateTime.Now;
DateTime later = now + TimeSpan.FromHours(1.0);
Assert.That(later, Is.EqualTo(now).Within(TimeSpan.FromHours(3.0)));
Assert.That(later, Is.EqualTo(now).Within(3).Hours);
Utilisez Assert.That et Is.Equal contrainte au lieu de Assert.AreEqual. Vous trouverez ci-dessous un exemple de code provenant du site Web Nunit lui-même
DateTime now = DateTime.Now;
DateTime later = now + TimeSpan.FromHours(1.0);
Assert.That(now, Is.EqualTo(now) );
Assert.That(later, Is.EqualTo(now).Within(TimeSpan.FromHours(3.0)));
Assert.That(later, Is.EqualTo(now).Within(3).Hours);
Pour vérifier correctement si 2 dates arbitraires sont égales à une tolérance de 1 seconde, voici une solution correcte:
Debug.Assert(Math.Abs((date1 - date2).TotalSeconds) < 1)
J'ai pensé que j'ajouterais ceci comme solution car la solution acceptée était incorrecte lorsque date2
est plus grand que date1
de plus d'une seconde, et la solution n'a pas été mise à jour suite à mon commentaire à @ SwDevMan81.