17/8/2010 23:26
Lucas Ontivero
Qué significa el porcentaje de cobertura de código
Esto es elemental pero nunca sobra un poco de repetición: la cobertura de código es una métrica INVERSA. Vamos a ver por qué. En la clase de abajo tenemos un solo método que probar: el ToString(). Queremos que nos devuelva el nombre completo del cliente cada vez que se lo invoque.
public class Customer
{ private string firstName, middleName, lastName;
public Customer(string firstName, string middleName="", string lastName="")
{ this.firstName = firstName;
this.middleName = middleName;
this.lastName = lastName;
}
public override string ToString()
{ string fullName = string.Empty;
if (!string.IsNullOrWhiteSpace(firstName))
{ fullName += firstName + " ";
}
if (!string.IsNullOrWhiteSpace(middleName))
{ fullName += middleName;
}
if (!string.IsNullOrWhiteSpace(lastName))
{ fullName += " " + lastName;
}
return fullName;
}
}
Con la siguiente prueba obtenemos el 100% de cobertura de código:
[Test]
public void ToString_must_return_the_full_name()
{ var customer = new Customer(
firstName: "Lucas",
middleName: "Eugenio",
lastName: "Ontivero");
Assert.That(customer.ToString(), Is.EqualTo("Lucas Eugenio Ontivero"));}
Pero si volvemos al método ToString() podremos a simple vista notar esos extraños espacios en blanco concatenados inmediatamente después de firstName y antes de lastName. El método obviamente está mal y lo podríamos descubrir con la siguiente prueba:
[Test]
public void ToString_must_return_the_full_name_even_with_no_middle_name()
{ var customer = new Customer(
firstName: "Lucas",
lastName: "Ontivero");
Assert.That(customer.ToString(), Is.EqualTo("Lucas Ontivero"));}
Test 'ConsoleApplication3.CustomerTests.ToString_must_return_the_full_name_even_with_no_middle_name' failed:
Expected string length 14 but was 15. Strings differ at index 6.
Expected: "Lucas Ontivero"
But was: "Lucas Ontivero"
-------------------^
Entonces ¿para qué nos sirve el valor de cobertura de código?. Bien, si obtenemos una cobertura de código muy baja, como podría ser una por debajo del 30%, esto nos indica que deberíamos redoblar el esfuerzo para crear más pruebas ya que solo una muy pequeña porción del mismo está siendo validada. Por otro lado, un valor alto de cobertura, digamos mayor a un 70%, no nos dice absolutamente nada en el sentido de que no podemos realmente conocer cuantos “caminos” están siendo alcanzados.
Archivado en: .Net,Desarrollo,Conceptos,XP,TDD
Comparte este post: