47 votes

C # pourquoi datetime ne peut pas comparer?

mon test unitaire C # a la déclaration suivante:

 Assert.AreEqual(logoutTime, log.First().Timestamp);
 

Pourquoi il a échoué avec les informations suivantes:

 Assert.AreEqual failed. Expected:<4/28/2010 2:30:37 PM>. Actual:<4/28/2010 2:30:37 PM>.
 

N'est-ce pas la même chose?

 EDIT
 

Utilisez ceci si vous ne souhaitez que seconder:

Assert.AreEqual(logoutTime.ToString(), log.First().Timestamp.ToString());

44voto

Dinah Points 15711

Avez-vous vérifié que le nombre de tiques/millisecondes sont égaux?

Si vous n' DateTime.Now() deux fois dos à dos, ils semblent avoir le même nombre à la minute près, et probablement même à la deuxième, mais ils varient souvent par les tiques. Si vous souhaitez vérifier l'égalité à la minute, à comparer chaque DateTime seulement à ce degré. Pour plus d'informations sur l'arrondissement DateTimes, voir ici


Une remarque à propos de la résolution:

La propriété Now est fréquemment utilisé pour mesurer la performance. Toutefois, en raison de sa faible résolution, il n'est pas adapté pour une utilisation comme un outil d'analyse comparative. Une meilleure alternative est d'utiliser le Chronomètre de la classe.

4voto

Dan Diplo Points 16133

Le Affirmer l'échec de la méthode est probablement appeler ToString() sur le DateTime qui retourne un tronc, forme lisible par l'homme de la date, sans millisecondes composant. C'est pourquoi il semble qu'ils sont égaux, alors qu'en fait, l'objet DateTime a une précision de 100 nanosecondes unité (connu sous le nom de Tique). Cela signifie qu'il est hautement improbable que les deux objets DateTime auront la même valeur. Pour comparer, vous voudrez probablement pour tronquer la valeur, peut-être par le formatage de la date de la fidélité dont vous avez besoin.

4voto

Germ Points 1944

Essayez quelque chose comme Assert.AreEqual(logoutTime.Ticks, log.First().Timestamp.Ticks)

1voto

manu08 Points 1572

Êtes-vous sûr que logoutTime et log.First (). Les horodatages sont tous deux tapés comme DateTime?

Dans l'affirmative, ils peuvent également avoir des valeurs différentes pour les informations temporelles plus spécifiques (par exemple, millisecondes).

-1voto

Asad Butt Points 8989

Je suppose que Assert.AreEqual<T> utilise Object.Equals() pour déterminer l'égalité des objets mais pas les valeurs.

Probablement, cette déclaration compare deux objets différents et renvoie donc faux.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X