мой модульный тест C# имеет следующее утверждение:
Assert.AreEqual(logoutTime, log.First().Timestamp);
Почему это является отказавшим со следующей информацией:
Assert.AreEqual failed. Expected:<4/28/2010 2:30:37 PM>. Actual:<4/28/2010 2:30:37 PM>.
Разве они не то же?
Обновление:
Используйте это, если Вы только заботитесь второму:
Assert.AreEqual(logoutTime.ToString(), log.First().Timestamp.ToString());
Вы проверили, что количество тиков / миллисекунд одинаково?
Если вы выполните DateTime.Now ()
дважды подряд, они будут отображаться с точностью до минуты. и, возможно, даже до секунды , но они часто будут меняться в зависимости от тиков. Если вы хотите проверить равенство только до минуты, сравнивайте каждый DateTime только до этой степени. Для получения информации об округлении DateTimes см. здесь
Свойство Now часто используется для измерения производительности. Однако из-за низкого разрешения он не подходит для использования в качестве инструмента тестирования. Лучшей альтернативой является использование класса Секундомер .
Предполагая, что logoutTime и log.First (). Timestamp имеют тип DateTime, вы должны попробовать использовать это вместо:
Assert.AreEqual(logoutTime.Ticks, log.First().Timestamp.Ticks);
Я полагаю, Assert.AreEqual
использует Object.Equals ()
для определения равенства объектов, но не значений.
Вероятно, этот оператор сравнивает два разных объекта и поэтому возвращает false.
Вы уверены, что logoutTime и log.First (). Timestamp оба набраны как DateTime?
Если да, они также могут иметь разные значения для более конкретной информации о времени (например, миллисекунды).
Метод сбоя Assert, вероятно, вызывает ToString () в DateTime, который возвращает усеченную, удобочитаемую форму даты без компонент миллисекунд. Вот почему кажется, что они равны, когда на самом деле объект DateTime имеет точность в 100 наносекунд (известную как Tick ). Это означает, что маловероятно, что два объекта DateTime будут иметь одно и то же значение. Для сравнения вы, вероятно, захотите усечь значение, возможно, отформатировав дату до требуемой точности.
Попробуйте что-нибудь вроде Assert.AreEqual(logoutTime.Ticks, log.First().Timestamp.Ticks)