Angel "Java" Lopez

NET, Java, PHP y Desarrollo de Software

This Blog

Syndication

Search

Tags

Community

Email Notifications

Archives

.NET

ASP.NET

Windows Form

VB.NET

C#

Sitios

Blogs

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

Published Wed, Apr 18 2012 15:25 by lopez

Comments

# TDD Paso a Paso (4) Otro tipo de Semana@ Tuesday, April 24, 2012 5:05 AM

Anterior Post Ahora veamos de tratar uno de los requerimientos: que los días laborables/no laborables

Angel "Java" Lopez

# TDD Paso a Paso (4) Otro tipo de Semana@ Tuesday, April 24, 2012 5:48 AM

Anterior Post Ahora veamos de tratar uno de los requerimientos: que los días laborables/no laborables

Angel "Java" Lopez

Leave a Comment

(required) 
(required) 
(optional)
(required) 
If you can't read this number refresh your screen
Enter the numbers above: