jueves, septiembre 17, 2009

Sharp Tests Ex

Descargue las extensiones para MsTests desarrolladas por Fabio Maulo: "Sharp Tests Extensions". La idea de estas extensiones es que tus aserciones en las pruebas sean escritas con mayor fluidez. ademas de que es mas clara la distinción entre el valor esperado y el valor obtenido. Evitando el uso de la clase Assert directamente.

Un ejemplo de como cambia un test usando estas extensiones

Test usando MsTest sin extensiones

[TestMethod]
public void should_change_password()
{
var username = "username";
var originalPassword = "original";
var newPassword = "newPassword";

var user = new User { Password = originalPassword };

mockRepository.Setup(r => r.GetUser(username))
.Returns(user);

bool result = accountService.ChangePassword(
username, originalPassword, newPassword);

Assert.IsTrue(result);
Assert.AreEqual(newPassword, user.Password);
mockRepository.Verify(r => r.Save());
}


ahora esta es la misma prueba utilizando Sharp TextsEx
[TestMethod]
public void should_change_password()
{
var username = "username";
var originalPassword = "original";
var newPassword = "newPassword";

var user = new User { Password = originalPassword };

mockRepository.Setup(r => r.GetUser(username))
.Returns(user);

bool result = accountService.ChangePassword(
username, originalPassword, newPassword);

result.Should().Be.True();
user.Password.Should().Be.EqualTo(newPassword);
mockRepository.Verify(r => r.Save());
}


estas son las lineas que cambian de:
Assert.IsTrue(result);
Assert.AreEqual(newPassword, user.Password);

a
result.Should().Be.True();
user.Password.Should().Be.EqualTo(newPassword);


Se escribe mas sin embargo queda mas descriptivo cual es la intensión de la prueba ademas de que tenemos la ventaja que intellisense nos ayuda a completar la aserción.

En lo personal me cuesta un poco acostumbrarme a no ver la clase Assert al final de los metodos, pero debo reconocer que el test es mas claro así.

4 comentarios:

  1. a mi me recontra-patea el higado ver la verbosidad de codigo asi, jaja

    pero en fin, cuestion de estilos

    ResponderEliminar
  2. jaja si, al principio también pensé que era mucho código innecesario.

    Le mostré este código a gente que no hace unit test y les gusto mas la opción verbosa, entendieron mas la idea del TDD.

    De acuerdo en lo que comentas es cuestión de gustos.

    Gracias por el feedback

    ResponderEliminar
  3. Yo uso NUnitEx desde hace un tiempo que también son de Fabio y me encanta la verbosidad. Hace que se vea mas claro y es mucho mas intuitivo de escribir.

    ResponderEliminar
  4. Ahora probá a extender #TestsEx y probá a extender, con customs asserts, a MsTests... despues contame ;)

    ResponderEliminar