TDD+CI con Teamcity

Pedro J. Molina
Pedro J. MolinaFounder at Metadev en Metadev
Mercurial
Test Driven Development
Continuous Integration
@pmolinamPedro J. Molina
Agenda
• Mercurial
• Test Driven Development
• Continuous Integration
• Demos
Cartuja .NET
Patrocinadores
Cartuja .NET
Contenido
 Unit Test
 Tests
 SUT
 AAA
 Mocking
Cartuja .NET
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
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
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
Aserciones
Assert.AreEquals(
3, Sum(1,2), “La suma no cuadra”);
Valor
Real
Valor
Esperado
Mensaje en caso de fallo
Cartuja .NET
Colores de Test
Fallo
Inconcluso
Correcto
Cartuja .NET
Frameworks de UnitTesting
•NUnit (el primero en .NET) (port de Junit)
•MSTests
•Xunit ( @jamesnewkirk, @bradwilson )
Cartuja .NET
Atributos
NUnit 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
Dependencias
• Stubs
Cartuja .NET
Refactoring
•Refactoring is the act of changing
the code’s design without breaking
existing functionality.
Cartuja .NET
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
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
Frameworks de Mocking
• Moq
• RhinoMocks
• Etc…
• MS Fakes (antiguo Moles) (solo en VS Ultimate)
Cartuja .NET
Mocking: Microsoft Fakes
Cartuja .NET
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
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
Internals
• AssemblyInfo.cs
using 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 funciona
Cartuja .NET
UI Tests
•WatiN
•Selenium
•Coded UI
Cartuja .NET
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
Nugets
• nunit
• nunit.runners
 xunit
 autofixture
 moq
Cartuja .NET
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
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
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
Cartuja .NET
1 de 28

Recomendados

Testing 101 con Arquillian por
Testing 101 con ArquillianTesting 101 con Arquillian
Testing 101 con ArquillianVíctor Leonel Orozco López
127 vistas29 diapositivas
Pairwise and property based testing por
Pairwise and property based testingPairwise and property based testing
Pairwise and property based testingAgustin Ramos
754 vistas38 diapositivas
Scaling MDD for production: enabling SoC at model time por
Scaling MDD for production: enabling SoC at model timeScaling MDD for production: enabling SoC at model time
Scaling MDD for production: enabling SoC at model timePedro J. Molina
932 vistas45 diapositivas
Hivepod: Casos de uso en OpenData por
Hivepod: Casos de uso en OpenDataHivepod: Casos de uso en OpenData
Hivepod: Casos de uso en OpenDataPedro J. Molina
797 vistas10 diapositivas
Multichannel User Interfaces por
Multichannel User InterfacesMultichannel User Interfaces
Multichannel User InterfacesPedro J. Molina
1.4K vistas44 diapositivas
CG2010 Tailored Code Generators por
CG2010 Tailored Code GeneratorsCG2010 Tailored Code Generators
CG2010 Tailored Code GeneratorsPedro J. Molina
1.3K vistas40 diapositivas

Más contenido relacionado

Destacado

Introducción a StackOverflow por
Introducción a StackOverflowIntroducción a StackOverflow
Introducción a StackOverflowPedro J. Molina
803 vistas11 diapositivas
MDD: Models, frameworks, & code generation por
MDD: Models, frameworks, & code generationMDD: Models, frameworks, & code generation
MDD: Models, frameworks, & code generationPedro J. Molina
2.9K vistas73 diapositivas
SVQDC 2017 Tecnologías para Microservicios por
SVQDC 2017 Tecnologías para MicroserviciosSVQDC 2017 Tecnologías para Microservicios
SVQDC 2017 Tecnologías para MicroserviciosPedro J. Molina
1.1K vistas42 diapositivas
Microservicios sobre MEAN Stack por
Microservicios sobre MEAN StackMicroservicios sobre MEAN Stack
Microservicios sobre MEAN StackPedro J. Molina
1.7K vistas41 diapositivas
Tecnologías para microservicios por
Tecnologías para microserviciosTecnologías para microservicios
Tecnologías para microserviciosPedro J. Molina
3.6K vistas47 diapositivas
Modeling on the Web por
Modeling on the WebModeling on the Web
Modeling on the WebPedro J. Molina
1.2K vistas55 diapositivas

Destacado(14)

MDD: Models, frameworks, & code generation por Pedro J. Molina
MDD: Models, frameworks, & code generationMDD: Models, frameworks, & code generation
MDD: Models, frameworks, & code generation
Pedro J. Molina2.9K vistas
SVQDC 2017 Tecnologías para Microservicios por Pedro J. Molina
SVQDC 2017 Tecnologías para MicroserviciosSVQDC 2017 Tecnologías para Microservicios
SVQDC 2017 Tecnologías para Microservicios
Pedro J. Molina1.1K vistas
Microservicios sobre MEAN Stack por Pedro J. Molina
Microservicios sobre MEAN StackMicroservicios sobre MEAN Stack
Microservicios sobre MEAN Stack
Pedro J. Molina1.7K vistas
Tecnologías para microservicios por Pedro J. Molina
Tecnologías para microserviciosTecnologías para microservicios
Tecnologías para microservicios
Pedro J. Molina3.6K vistas
Modelling the User Interface por Pedro J. Molina
Modelling the User InterfaceModelling the User Interface
Modelling the User Interface
Pedro J. Molina4.5K vistas
Code Generation for Conceptual User Interface Patterns por Pedro J. Molina
Code Generation for Conceptual User Interface PatternsCode Generation for Conceptual User Interface Patterns
Code Generation for Conceptual User Interface Patterns
Pedro J. Molina2.1K vistas
The PISA Project: a MDD case study por Pedro J. Molina
The PISA Project: a MDD case studyThe PISA Project: a MDD case study
The PISA Project: a MDD case study
Pedro J. Molina798 vistas
Opensouthcode: Microservicios sobre MEAN Stack por Pedro J. Molina
Opensouthcode: Microservicios sobre MEAN StackOpensouthcode: Microservicios sobre MEAN Stack
Opensouthcode: Microservicios sobre MEAN Stack
Pedro J. Molina1.2K vistas
MDD - Desarrollo de software dirigido por modelos que funciona (de verdad!) por Jordi Cabot
MDD - Desarrollo de software dirigido por modelos que funciona (de verdad!)MDD - Desarrollo de software dirigido por modelos que funciona (de verdad!)
MDD - Desarrollo de software dirigido por modelos que funciona (de verdad!)
Jordi Cabot23K vistas

Similar a TDD+CI con Teamcity

Cobertura de código con test funcionales para superhéroes por
Cobertura de código con test funcionales para superhéroesCobertura de código con test funcionales para superhéroes
Cobertura de código con test funcionales para superhéroesatSistemas
994 vistas47 diapositivas
Unit testing consejos por
Unit testing   consejosUnit testing   consejos
Unit testing consejosGermán Küber
192 vistas25 diapositivas
Automatizacion de Pruebas por
Automatizacion de PruebasAutomatizacion de Pruebas
Automatizacion de PruebasGuino Henostroza
1.8K vistas33 diapositivas
Practicas tecnicas por
Practicas tecnicasPracticas tecnicas
Practicas tecnicasJoan Sebastián Ramírez Pérez
415 vistas45 diapositivas
Pruebas automaticas por
Pruebas automaticasPruebas automaticas
Pruebas automaticasJoan Sebastián Ramírez Pérez
804 vistas26 diapositivas
Probando aplicaciones AngularJS por
Probando aplicaciones AngularJSProbando aplicaciones AngularJS
Probando aplicaciones AngularJSRodrigo Pimentel
1.8K vistas67 diapositivas

Similar a TDD+CI con Teamcity(20)

Cobertura de código con test funcionales para superhéroes por atSistemas
Cobertura de código con test funcionales para superhéroesCobertura de código con test funcionales para superhéroes
Cobertura de código con test funcionales para superhéroes
atSistemas994 vistas
Cobertura de Código con Tests Funcionales por atSistemas
Cobertura de Código con Tests Funcionales Cobertura de Código con Tests Funcionales
Cobertura de Código con Tests Funcionales
atSistemas828 vistas
To mock or not to mock por Eloi Poch
To mock or not to mockTo mock or not to mock
To mock or not to mock
Eloi Poch296 vistas
Tu primer script en Katalon - Paso a Paso por Argentesting
Tu primer script en Katalon - Paso a PasoTu primer script en Katalon - Paso a Paso
Tu primer script en Katalon - Paso a Paso
Argentesting7.3K vistas
Pruebas-OCW.pdf por lgarcias
Pruebas-OCW.pdfPruebas-OCW.pdf
Pruebas-OCW.pdf
lgarcias11 vistas
Integracion Continua por Lenin Lozano
Integracion ContinuaIntegracion Continua
Integracion Continua
Lenin Lozano463 vistas
DeSymfonyDay 2014 - To mock or not to mock - Spanish por Jordi Llonch
DeSymfonyDay 2014 - To mock or not to mock - SpanishDeSymfonyDay 2014 - To mock or not to mock - Spanish
DeSymfonyDay 2014 - To mock or not to mock - Spanish
Jordi Llonch1.2K vistas
DeSymfonyDay 2014 - To mock or not to mock - Spanish por Akamon Engineering
DeSymfonyDay 2014 - To mock or not to mock - SpanishDeSymfonyDay 2014 - To mock or not to mock - Spanish
DeSymfonyDay 2014 - To mock or not to mock - Spanish
Akamon Engineering1.8K vistas
DeSymfonyDay 2014 - To mock or not to mock - Spanish por Jordi Llonch
DeSymfonyDay 2014 - To mock or not to mock - SpanishDeSymfonyDay 2014 - To mock or not to mock - Spanish
DeSymfonyDay 2014 - To mock or not to mock - Spanish
Jordi Llonch359 vistas
Introducción a testing en php por Ismael Ambrosi
Introducción a testing en phpIntroducción a testing en php
Introducción a testing en php
Ismael Ambrosi1.1K vistas
[Shared] ML Bootcamp - GDG Barcelona - Semana 4.pptx por Gabriela Soto
[Shared] ML Bootcamp - GDG Barcelona - Semana 4.pptx[Shared] ML Bootcamp - GDG Barcelona - Semana 4.pptx
[Shared] ML Bootcamp - GDG Barcelona - Semana 4.pptx
Gabriela Soto10 vistas

Más de Pedro J. Molina

MDE en la industria por
MDE en la industriaMDE en la industria
MDE en la industriaPedro J. Molina
28 vistas55 diapositivas
Terraform por
TerraformTerraform
TerraformPedro J. Molina
5 vistas1 diapositiva
dotnetMalaga-2020 Gestión de la configuración en aplicaciones Web por
dotnetMalaga-2020 Gestión de la configuración en aplicaciones WebdotnetMalaga-2020 Gestión de la configuración en aplicaciones Web
dotnetMalaga-2020 Gestión de la configuración en aplicaciones WebPedro J. Molina
85 vistas20 diapositivas
Infrastructure as Code with Terraform por
Infrastructure as Code with TerraformInfrastructure as Code with Terraform
Infrastructure as Code with TerraformPedro J. Molina
51 vistas34 diapositivas
Are Startups for me? por
Are Startups for me?Are Startups for me?
Are Startups for me?Pedro J. Molina
465 vistas18 diapositivas
Meow Demo por
Meow DemoMeow Demo
Meow DemoPedro J. Molina
228 vistas5 diapositivas

Más de Pedro J. Molina(16)

dotnetMalaga-2020 Gestión de la configuración en aplicaciones Web por Pedro J. Molina
dotnetMalaga-2020 Gestión de la configuración en aplicaciones WebdotnetMalaga-2020 Gestión de la configuración en aplicaciones Web
dotnetMalaga-2020 Gestión de la configuración en aplicaciones Web
Pedro J. Molina85 vistas
Infrastructure as Code with Terraform por Pedro J. Molina
Infrastructure as Code with TerraformInfrastructure as Code with Terraform
Infrastructure as Code with Terraform
Pedro J. Molina51 vistas
Essential as the base for Web DSLs por Pedro J. Molina
Essential as the base for Web DSLsEssential as the base for Web DSLs
Essential as the base for Web DSLs
Pedro J. Molina300 vistas
ACM SIGCHI EICS-2019 Keynote. Quid, Pedro J. Molina por Pedro J. Molina
ACM SIGCHI EICS-2019 Keynote. Quid, Pedro J. MolinaACM SIGCHI EICS-2019 Keynote. Quid, Pedro J. Molina
ACM SIGCHI EICS-2019 Keynote. Quid, Pedro J. Molina
Pedro J. Molina646 vistas
Securizando por construcción mediante MDE por Pedro J. Molina
Securizando por construcción mediante MDESecurizando por construcción mediante MDE
Securizando por construcción mediante MDE
Pedro J. Molina237 vistas
Building APIs with the OpenApi Spec por Pedro J. Molina
Building APIs with the OpenApi SpecBuilding APIs with the OpenApi Spec
Building APIs with the OpenApi Spec
Pedro J. Molina1K vistas

Último

DELITOS INFORMATICOS EFRAIN CAMACHO 27462611 INFORMATICA III.pptx por
DELITOS INFORMATICOS EFRAIN CAMACHO 27462611 INFORMATICA III.pptxDELITOS INFORMATICOS EFRAIN CAMACHO 27462611 INFORMATICA III.pptx
DELITOS INFORMATICOS EFRAIN CAMACHO 27462611 INFORMATICA III.pptxdavidsalazar63484
5 vistas6 diapositivas
Fundamentos De Electricidad y Electrónica equipo 5.pdf por
Fundamentos De Electricidad y Electrónica equipo 5.pdfFundamentos De Electricidad y Electrónica equipo 5.pdf
Fundamentos De Electricidad y Electrónica equipo 5.pdfcoloradxmaria
14 vistas14 diapositivas
EM.020 INSTALACIONES DE COMUNICACIONES.pdf por
EM.020 INSTALACIONES DE COMUNICACIONES.pdfEM.020 INSTALACIONES DE COMUNICACIONES.pdf
EM.020 INSTALACIONES DE COMUNICACIONES.pdfgilberenriquedavila
7 vistas4 diapositivas
Tecnologías para la enseñanza virtual_cdc.pptx por
Tecnologías para la enseñanza virtual_cdc.pptxTecnologías para la enseñanza virtual_cdc.pptx
Tecnologías para la enseñanza virtual_cdc.pptxCarmenerdelHuasco
6 vistas25 diapositivas
TALLER DE ANÁLISIS DE ARTEFACTOS_.docx por
TALLER DE ANÁLISIS DE ARTEFACTOS_.docxTALLER DE ANÁLISIS DE ARTEFACTOS_.docx
TALLER DE ANÁLISIS DE ARTEFACTOS_.docxDilanTabares
6 vistas10 diapositivas
Fundamentos de electricidad y electrónica.docx por
Fundamentos de electricidad y electrónica.docxFundamentos de electricidad y electrónica.docx
Fundamentos de electricidad y electrónica.docxDilanTabares
5 vistas9 diapositivas

Último(20)

DELITOS INFORMATICOS EFRAIN CAMACHO 27462611 INFORMATICA III.pptx por davidsalazar63484
DELITOS INFORMATICOS EFRAIN CAMACHO 27462611 INFORMATICA III.pptxDELITOS INFORMATICOS EFRAIN CAMACHO 27462611 INFORMATICA III.pptx
DELITOS INFORMATICOS EFRAIN CAMACHO 27462611 INFORMATICA III.pptx
Fundamentos De Electricidad y Electrónica equipo 5.pdf por coloradxmaria
Fundamentos De Electricidad y Electrónica equipo 5.pdfFundamentos De Electricidad y Electrónica equipo 5.pdf
Fundamentos De Electricidad y Electrónica equipo 5.pdf
coloradxmaria14 vistas
Tecnologías para la enseñanza virtual_cdc.pptx por CarmenerdelHuasco
Tecnologías para la enseñanza virtual_cdc.pptxTecnologías para la enseñanza virtual_cdc.pptx
Tecnologías para la enseñanza virtual_cdc.pptx
TALLER DE ANÁLISIS DE ARTEFACTOS_.docx por DilanTabares
TALLER DE ANÁLISIS DE ARTEFACTOS_.docxTALLER DE ANÁLISIS DE ARTEFACTOS_.docx
TALLER DE ANÁLISIS DE ARTEFACTOS_.docx
DilanTabares6 vistas
Fundamentos de electricidad y electrónica.docx por DilanTabares
Fundamentos de electricidad y electrónica.docxFundamentos de electricidad y electrónica.docx
Fundamentos de electricidad y electrónica.docx
DilanTabares5 vistas
Los principios de la Antropometria y Ergonomia.pdf por BenisBorges
Los principios de la Antropometria y Ergonomia.pdfLos principios de la Antropometria y Ergonomia.pdf
Los principios de la Antropometria y Ergonomia.pdf
BenisBorges6 vistas
CÓMO PUBLICAR UNA PRESENTACIÓN GRÁFICA EN INTERNET.pptx por dreadlockp5
CÓMO PUBLICAR UNA PRESENTACIÓN GRÁFICA EN INTERNET.pptxCÓMO PUBLICAR UNA PRESENTACIÓN GRÁFICA EN INTERNET.pptx
CÓMO PUBLICAR UNA PRESENTACIÓN GRÁFICA EN INTERNET.pptx
dreadlockp58 vistas
Tarea15.pptx por illanlir
Tarea15.pptxTarea15.pptx
Tarea15.pptx
illanlir11 vistas
Presentación: El impacto y peligro de la piratería de software por EmanuelMuoz11
Presentación: El impacto y peligro de la piratería de softwarePresentación: El impacto y peligro de la piratería de software
Presentación: El impacto y peligro de la piratería de software
EmanuelMuoz1117 vistas
MVelazco_Internet, Origenes y Evolucion.pptx por al223915
MVelazco_Internet, Origenes  y Evolucion.pptxMVelazco_Internet, Origenes  y Evolucion.pptx
MVelazco_Internet, Origenes y Evolucion.pptx
al2239156 vistas
Fundamentos de Electricidad y Electronica 9-3 (1).docx por Samuel709479
Fundamentos de Electricidad y Electronica 9-3 (1).docxFundamentos de Electricidad y Electronica 9-3 (1).docx
Fundamentos de Electricidad y Electronica 9-3 (1).docx
Samuel7094795 vistas
Tecnologías para la enseñanza virtual.pptx por exprosaavedra
Tecnologías para la enseñanza virtual.pptxTecnologías para la enseñanza virtual.pptx
Tecnologías para la enseñanza virtual.pptx
exprosaavedra14 vistas
Tarea Curso Tecnologias para la enseñanza virtual.pptx por lesliealejandraContr
Tarea Curso Tecnologias para la enseñanza virtual.pptxTarea Curso Tecnologias para la enseñanza virtual.pptx
Tarea Curso Tecnologias para la enseñanza virtual.pptx
actividadanlisisdeartefactos1-230424222159-fef7d8f3 (1).docx por MaraJos722801
actividadanlisisdeartefactos1-230424222159-fef7d8f3 (1).docxactividadanlisisdeartefactos1-230424222159-fef7d8f3 (1).docx
actividadanlisisdeartefactos1-230424222159-fef7d8f3 (1).docx
MaraJos7228015 vistas
Tecnologías para la enseñanza virtual por mpachecocodem
Tecnologías para la enseñanza virtual Tecnologías para la enseñanza virtual
Tecnologías para la enseñanza virtual
mpachecocodem9 vistas

TDD+CI con Teamcity