TDD Paso a Paso (3) Domingo y Semana Típica

Anterior Post 
Siguiente Post 


Sigo con la descripción de los tests que fui escribiendo para este problema. Ahora que ya tengo un test para ver si sábado es día laborable, agregué un test para ver si cada domingo es día laborable:


 


[TestMethod]
public void TypicalSaturdayIsANonWorkingDay()
{
    WorkingDaysCalendar calendar = new WorkingDaysCalendar();

    DateTime saturday = new DateTime(2012, 3, 10);
    Assert.AreEqual(saturday.DayOfWeek, DayOfWeek.Saturday);

    Assert.IsFalse(calendar.IsWorkingDay(saturday));
}

 


Inicialmente, el test quedó en rojo. El problema es que el código que llevo escrito solamente reconoce como no laborable a los Sábados. Modifiqué la función que determina eso a:


 


public bool IsWorkingDay(DateTime day)
{
    if (day.DayOfWeek == DayOfWeek.Sunday || day.DayOfWeek == DayOfWeek.Saturday)
        return false;

    return true;
}

 


Y el test pasó. Vean que aparecen dos constantes en el código interno. No me preocupa por ahora, porque refleja lo que tengo hasta ahora en los tests. En algún momento, tendré que contemplar (como pedía el problema original) que hay otras semanas típicas: por ejemplo, para un peluquero el sábado puede ser día laborable, y para una panadería el domingo es laborable pero el lunes no.


Llegado a este punto, escribí un test que sale un poco de TDD “estricto”. Es un tests que me dió en verde desde el comienzo. Es el que prueba los días de una semana típica:


 


[TestMethod]
public void TypicalWeek()
{
    WorkingDaysCalendar calendar = new WorkingDaysCalendar();

    DateTime monday = new DateTime(2012, 3, 12);
    Assert.AreEqual(monday.DayOfWeek, DayOfWeek.Monday);

    Assert.IsTrue(calendar.IsWorkingDay(monday));
    Assert.IsTrue(calendar.IsWorkingDay(monday.AddDays(1)));
    Assert.IsTrue(calendar.IsWorkingDay(monday.AddDays(2)));
    Assert.IsTrue(calendar.IsWorkingDay(monday.AddDays(3)));
    Assert.IsTrue(calendar.IsWorkingDay(monday.AddDays(4)));
    Assert.IsFalse(calendar.IsWorkingDay(monday.AddDays(5)));
    Assert.IsFalse(calendar.IsWorkingDay(monday.AddDays(6)));
}

 


Me gusta tener ese test, para que alguien pueda ver, en un solo lugar, lo que considero para esta API como semana típica. Otros “approach”: no escribir este test, o escribirlo y eliminar los anteriores. Pero yo me “encariño” :-) con los tests, y es raro que los elimine. También dan una idea de la historia, de la evolución de la API. Así que agregué este test de arriba, nacido prístinamente en verde, y dejé los anteriores.


Próximos posts: cómo admitir otro tipo de semanas “típicas”, feriados, etc.


Como siempre, toda esta serie de cambios quedó reflejado en el log del proyecto. Ver https://github.com/ajlopez/TddOnTheRocks


Nos leemos!


Angel “Java” Lopez
http://www.ajlopez.com
http://twitter.com/ajlopez

This entry was posted in 10549, 11699, 3463, 5374. Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *


*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>