TDD+CI con Teamcity

1,038 views

Published on

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.

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,038
On SlideShare
0
From Embeds
0
Number of Embeds
6
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

TDD+CI con Teamcity

  1. 1. MercurialTest Driven DevelopmentContinuous Integration@pmolinamPedro J. Molina
  2. 2. Agenda• Mercurial• Test Driven Development• Continuous Integration• DemosCartuja .NET
  3. 3. PatrocinadoresCartuja .NET
  4. 4. Contenido Unit Test Tests SUT AAA MockingCartuja .NET
  5. 5. Herramientas TortoiseHq http://tortoisehg.bitbucket.org/ VisualHq http://visualhg.codeplex.com/ Nunit http://nunit.org/ Xunit http://xunit.codeplex.com/ MOQ https://github.com/Moq TeamCity http://www.jetbrains.com/teamcity/Cartuja .NET
  6. 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 assumptionsafterward.• 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. 7. Propiedades de un buen test deunidad• Se prueba UN SOLO hecho• Legible: muestra comofunciona el sistema ->autodocumenta un API• Automatizable• Repetible (no debe dependendel estado de otros sistemaspara funcionar)• Sin dependencias• Debe ser fácil de implementar• Una vez escrito debe perdurarpara uso futuro• Cualquiera debe poderejecutarlo• Debe correr rápidoCartuja .NET
  8. 8. AsercionesAssert.AreEquals(3, Sum(1,2), “La suma no cuadra”);ValorRealValorEsperadoMensaje en caso de falloCartuja .NET
  9. 9. Colores de TestFalloInconclusoCorrectoCartuja .NET
  10. 10. Frameworks de UnitTesting•NUnit (el primero en .NET) (port de Junit)•MSTests•Xunit ( @jamesnewkirk, @bradwilson )Cartuja .NET
  11. 11. AtributosNUnit MSTests XUnit[TestFixture] [TestClass] - (no need: considered anti-pattern)[Test] [TestMethod] [Fact] / [Theory][Description] [Description][Ignore] [Ignore] [Ignore][SetUp] [TestInitialize] NO[TearDown] [TestCleanup] NO[ExpectedException] [ExpectedException] NO…Cartuja .NET
  12. 12. Dependencias• StubsCartuja .NET
  13. 13. Refactoring•Refactoring is the act of changingthe code’s design without breakingexisting functionality.Cartuja .NET
  14. 14. Inyección de Dependencias. DI• Patrón de diseño OO [Fowler] en el que se proporcionanobjetos a una clase, en lugar de ser la propia clase la que crealos objetos.• Por constructor• Por propiedades• No new() dentro de una claseCartuja .NET
  15. 15. Inversión de Control. IoC• El flujo habitual se da cuando es el código del usuario quieninvoca a un procedimiento de una biblioteca.• La inversión de control sucede cuando es la biblioteca la queinvoca el código del usuario.• Un FWK de IoC toma el control e invoca, crea y gestiona elciclo de vida de los objetos.Cartuja .NET
  16. 16. Frameworks de Mocking• Moq• RhinoMocks• Etc…• MS Fakes (antiguo Moles) (solo en VS Ultimate)Cartuja .NET
  17. 17. Mocking: Microsoft FakesCartuja .NET
  18. 18. Ejemplo de Mocking: Moqvar 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. 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 testy 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 aaparecer.Cartuja .NET
  20. 20. Internals• AssemblyInfo.csusing System.Runtime.CompilerServices;[assembly:InternalsVisibleTo("MyLib.Tests")]Cartuja .NET
  21. 21. Ficheros de soporte para Test• MSTEST: [Deploy]• Frágil: depende de VS Studio• Recurso embebido• Mas robusto: Siempre funcionaCartuja .NET
  22. 22. UI Tests•WatiN•Selenium•Coded UICartuja .NET
  23. 23. WatiN[Test]public void SearchForWatiNOnGoogle(){using (var browser = new IE("http://www.google.com")){browser.TextField(Find.ByName("q")).TypeText("WatiN");browser.Button(Find.ByName("btnG")).Click();Assert.IsTrue(browser.ContainsText("WatiN"));}}http://watin.org/Cartuja .NET
  24. 24. Nugets• nunit• nunit.runners xunit autofixture moqCartuja .NET
  25. 25. Continuous Integration• Definición: Proceso de automatizar lascompilaciones ante cada commit.• Pasos:• Compilar, Test de Unidad, Calidad deCódigo, Duplicados, Empaquetado, Publicación, Despliegues• Medir, detectar errores cuanto antes, calidad delcódigoCartuja .NET
  26. 26. Continuous Integration• Herramientas• Hudson  Jetkins• Cruise Control• TFS• Teamcity• Continuous Delivery: La capacidad de poder desplegar enproducción nuevas características de modo continuoCartuja .NET
  27. 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• TeamCityhttp://www.jetbrains.com/teamcity/Cartuja .NET
  28. 28. Cartuja .NET

×