Charla en Cartuja.NET sobre Mercurial, TDD en .NET con NUnit, MSTest, XUnit e Integración continua con Teamcity.
Impartida el 13 de junio de 2013 en Cartuja.NET, Sevilla.
6. Test de Unidad
• Definition:
• A unit test is a piece of a code (usually a method) that invokes another
• piece of code and checks the correctness of some assumptions
afterward.
• If the assumptions turn out to be wrong, the unit test has failed.
• A “unit” is a method or function.
• Unit testing will be performed against a system under test (SUT).
Cartuja .NET
7. Propiedades de un buen test de
unidad
• Se prueba UN SOLO hecho
• Legible: muestra como
funciona el sistema ->
autodocumenta un API
• Automatizable
• Repetible (no debe dependen
del estado de otros sistemas
para funcionar)
• Sin dependencias
• Debe ser fácil de implementar
• Una vez escrito debe perdurar
para uso futuro
• Cualquiera debe poder
ejecutarlo
• Debe correr rápido
Cartuja .NET
14. Inyección de Dependencias. DI
• Patrón de diseño OO [Fowler] en el que se proporcionan
objetos a una clase, en lugar de ser la propia clase la que crea
los objetos.
• Por constructor
• Por propiedades
• No new() dentro de una clase
Cartuja .NET
15. Inversión de Control. IoC
• El flujo habitual se da cuando es el código del usuario quien
invoca a un procedimiento de una biblioteca.
• La inversión de control sucede cuando es la biblioteca la que
invoca el código del usuario.
• Un FWK de IoC toma el control e invoca, crea y gestiona el
ciclo de vida de los objetos.
Cartuja .NET
16. Frameworks de Mocking
• Moq
• RhinoMocks
• Etc…
• MS Fakes (antiguo Moles) (solo en VS Ultimate)
Cartuja .NET
18. Ejemplo de Mocking: Moq
var mock = new Moq.Mock<IFoo>();
mock.Setup(foo => foo.DoSomething("ping")).Returns(true);
var sut = new Calculator(mock.Object);
Assert.AreEquals(true, sut.Execute(e));
Cartuja .NET
19. Test de regresión
• Definición: Evidencia la ocurrencia de un error presente o pasado.
• Permite demostrar la existencia o ausencia del fallo.
• Buena practica: Primer paso antes de corregir un bug: escribir un test
y demostrar que el test falla. Corregir el error hasta que el test pase.
Demuestra la corrección. Señaliza si el futuro, el error vuelve a
aparecer.
Cartuja .NET
25. Continuous Integration
• Definición: Proceso de automatizar las
compilaciones ante cada commit.
• Pasos:
• Compilar, Test de Unidad, Calidad de
Código, Duplicados, Empaquetado, Publicación, Despli
egues
• Medir, detectar errores cuanto antes, calidad del
código
Cartuja .NET
26. Continuous Integration
• Herramientas
• Hudson Jetkins
• Cruise Control
• TFS
• Teamcity
• Continuous Delivery: La capacidad de poder desplegar en
producción nuevas características de modo continuo
Cartuja .NET
27. Referencias
• The Art of Unit Testing, Roy Osherove
• Ugly code http://osherove.com/blog/2013/6/4/ugly-code-means-
your-product-used-to-be-successful.html
• Blog de Mark Seemann http://blog.ploeh.dk/
• http://bitbucket.org
• TeamCity
http://www.jetbrains.com/teamcity/
Cartuja .NET