MercurialTest Driven DevelopmentContinuous Integration@pmolinamPedro J. Molina
Agenda• Mercurial• Test Driven Development• Continuous Integration• DemosCartuja .NET
PatrocinadoresCartuja .NET
Contenido Unit Test Tests SUT AAA MockingCartuja .NET
Herramientas TortoiseHq http://tortoisehg.bitbucket.org/ VisualHq http://visualhg.codeplex.com/ Nunit http://nunit.org/...
Test de Unidad• Definition:• A unit test is a piece of a code (usually a method) that invokes another• piece of code and c...
Propiedades de un buen test deunidad• Se prueba UN SOLO hecho• Legible: muestra comofunciona el sistema ->autodocumenta un...
AsercionesAssert.AreEquals(3, Sum(1,2), “La suma no cuadra”);ValorRealValorEsperadoMensaje en caso de falloCartuja .NET
Colores de TestFalloInconclusoCorrectoCartuja .NET
Frameworks de UnitTesting•NUnit (el primero en .NET) (port de Junit)•MSTests•Xunit ( @jamesnewkirk, @bradwilson )Cartuja ....
AtributosNUnit MSTests XUnit[TestFixture] [TestClass] - (no need: considered anti-pattern)[Test] [TestMethod] [Fact] / [Th...
Dependencias• StubsCartuja .NET
Refactoring•Refactoring is the act of changingthe code’s design without breakingexisting functionality.Cartuja .NET
Inyección de Dependencias. DI• Patrón de diseño OO [Fowler] en el que se proporcionanobjetos a una clase, en lugar de ser ...
Inversión de Control. IoC• El flujo habitual se da cuando es el código del usuario quieninvoca a un procedimiento de una b...
Frameworks de Mocking• Moq• RhinoMocks• Etc…• MS Fakes (antiguo Moles) (solo en VS Ultimate)Cartuja .NET
Mocking: Microsoft FakesCartuja .NET
Ejemplo de Mocking: Moqvar mock = new Moq.Mock<IFoo>();mock.Setup(foo => foo.DoSomething("ping")).Returns(true);var sut = ...
Test de regresión• Definición: Evidencia la ocurrencia de un error presente o pasado.• Permite demostrar la existencia o a...
Internals• AssemblyInfo.csusing System.Runtime.CompilerServices;[assembly:InternalsVisibleTo("MyLib.Tests")]Cartuja .NET
Ficheros de soporte para Test• MSTEST: [Deploy]• Frágil: depende de VS Studio• Recurso embebido• Mas robusto: Siempre func...
UI Tests•WatiN•Selenium•Coded UICartuja .NET
WatiN[Test]public void SearchForWatiNOnGoogle(){using (var browser = new IE("http://www.google.com")){browser.TextField(Fi...
Nugets• nunit• nunit.runners xunit autofixture moqCartuja .NET
Continuous Integration• Definición: Proceso de automatizar lascompilaciones ante cada commit.• Pasos:• Compilar, Test de U...
Continuous Integration• Herramientas• Hudson  Jetkins• Cruise Control• TFS• Teamcity• Continuous Delivery: La capacidad d...
Referencias• The Art of Unit Testing, Roy Osherove• Ugly code http://osherove.com/blog/2013/6/4/ugly-code-means-your-produ...
Cartuja .NET
Upcoming SlideShare
Loading in...5
×

TDD+CI con Teamcity

615

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
615
On Slideshare
0
From Embeds
0
Number of Embeds
0
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

×