robuste integrasjonstester
DESCRIPTION
Slides from my talk in NNUG Trondheim 27. September 2012 about writing robust integration tests that depends on external files: http://trondheim.nnug.no/events/82962882/ The code is available on GitHub: https://github.com/joaroyen/IntegrationTestFileAccessTRANSCRIPT
© Acando AS© Acando AS
Robuste integrasjonstester
Joar Øyen@joaroyen
© Acando AS
Scenarioer
● Testing av egen kode eller bruk av biblioteker hvor konfigurasjon ikke kan injiseres
● Kode som modifiserer konfigurasjonsfiler
● Sertifikater
● Testdata
© Acando AS
Utfordringer
● Forskjellige testrammeverk tilbyr varierende grad av kontekstinformasjon
● Forskjellige testkjørere oppfører seg forskjellig med tanke på hvor filer legges og hvor testene kjøres
© Acando AS
Observasjoner - MSTest
● Oppretter egne kataloger for hver testkjøring for MSTest-prosjekter
● Alle testprosjekter kjøres ut fra samme katalog
● Kan deploye ekstra filer vha. konfigurasjon av testkjøring eller attributter
● Testrammeverket har egen klasse som heter TestContext med metadata om testkjøringen
© Acando AS
Observasjoner - ReSharper
● ShadowCopy av assemblies mens resten kjøres fra prosjektkatalogen
● Ettersom det ikke opprettes egne kataloger for hver testkjøring blir gammel moro liggende igjen
● Kan benytte konfigurasjonen til MSTest for å deploye filer
© Acando AS
Observasjoner - NCrunch
● Kopierer og bygger prosjektene i en egne foldere - referanser kopieres ikke inn som standard
● Kan konfigureres til å inkludere nødvendige filer
● Kjører ikke pre- og post build steg som standard
● Benytter egen konfigurasjonsfil som ender på .config.ncrunchconfig
● Test assemblyen har ikke en konfigurasjon dersom du ikke eksplisitt legger til en app.config
© Acando AS
Demo
© Acando AS
Oppsummering
●Med en gang du ønsker å kjøre noe annet en isolerte enhetstester=> Lær deg oppførselen til testrammeverket ditt og testkjøreren din
● Løsninger Sett BuildAction til Copy Allways/Copy if Newer for å få kopiert filer til bin under
bygging. Copy Allways skriver over endringer siden forrige bygg, men ikke nødvendigvis forrige testkjøring.
Benytt egenskapen CodeBase på en assembly for å håndtere shadow copy Benytt embedded resources for å pakke avhengigheter inn i dll'en som uansett blir
deployet Post-build script er en siste løsning
● Konfigurasjon må oppfriskes etter at konfigurasjonsfilen er oppdatert
● NB! Slike integrasjonstester støtter ikke parallellkjøring av tester
© Acando AS
Spørsmål
● Presentasjon: http://www.slideshare.net/joaroyen
● Kode: https://github.com/joaroyen
?