روش صحیح تست DateTime در NUnit و MSTest
نویسنده: وحید محمدطاهری
تاریخ: ۱۳۹۵/۰۸/۲۳ ۲۲:۱۵
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
2016-11-13 21:03:20 <=> 2016-11-13 21:03:21
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 );
public static class DateTimeAssert
{
public static void AreEqual( DateTime? expectedDate,
DateTime? actualDate,
TimeSpan maximum )
{
if ( expectedDate == null && actualDate == null )
return;
if ( expectedDate == null )
throw new NullReferenceException( "The expected date was null" );
if ( actualDate == null )
throw new NullReferenceException( "The actual date was null" );
var totalSecondsDifference = Math.Abs( ( actualDate.Value - expectedDate.Value ).TotalSeconds );
if ( totalSecondsDifference > maximum.TotalSeconds )
{
throw new Exception( $"Expected Date: {expectedDate}, Actual Date: {actualDate} Expected: {maximum}, Total Seconds Difference: {totalSecondsDifference}" );
}
}
} DateTimeAssert.AreEqual( new DateTime(2016, 11, 12, 21, 4, 5),
new DateTime(2016, 11, 13, 21, 4, 5),
TimeSpan.FromMilliSeconds(500));
DateTimeAssert.AreEqual( new DateTime(2016, 11, 12, 21, 4, 5),
new DateTime(2016, 11, 13, 21, 4, 5),
TimeSpan.FromMinutes(0.5)); // half a minute = 30s