Date post: | 19-Jan-2015 |
Category: |
Technology |
Upload: | daniellindemann |
View: | 1,128 times |
Download: | 1 times |
Daniel Lindemann | ITaCS GmbH
SharePoint Testing
mit Visual Studio 2012
Agenda
Was ist Test-Driven Development?
Testing SharePoint
Microsoft Fakes Mocking Framework
SharePoint Emulators
Was ist TDD?Testgetriebene Entwicklung (engl. test first development oder test-driven development (TDD)) ist eine Methode, die häufig bei der agilen Entwicklung von Computerprogrammen eingesetzt wird. Bei der testgetriebenen Entwicklung erstellt der Programmierer Software-Tests konsequent vor den zu testenden Komponenten.
Quelle: http://de.wikipedia.org/wiki/Testgetriebene_Entwicklung
TDD ist “interpretierbar”
Test-First MethodeAls Teil eines agilen Softwareentwicklungsprozesses
Legacy Code Testing
Verhalten von Quellcode überprüfen
Warum TDD?
Steigerung der Codequalität
Bessere Verständnis des Codes
Schnelles Finden von Fehlern
Pünktlich Feierabend
Hohe Flexibilität
TDD
Refactor
Rot
Grün
Test-First Methode
Agenda
Was ist Test-Driven Development?
Testing SharePoint
Microsoft Fakes Mocking Framework
SharePoint Emulators
SharePoint testen… aber wie?
Quelle: http://blog.mercedes-benz-passion.com/2009/05/hamann-vulcano-slr-im-windkanal/
Was ist “testbarer“ Code?
Abstraktes und Interface-basiertes Design
Kein Konstruktoren mit Logik
Methoden standardmäßig als virtual markieren
S
O
L
I
D
Single Responsibility PrincipleA class should have one, and only one, reason to change.
Open Close PrincipleYou should be able to extend a classes behavior, without modifying it.
Liskov Substitution PrincipleDerived classes must be substitutable for their base classes.
Interface Segregation PrincipleMake fine grained interfaces that are client specific.
Dependency Inversion PrincipleDepend on abstractions, not on concretions.
Was ist guter Code
Stubs und Mocks
Stubs
• Einfache Objekte z.B. Liste oder nur Text
Mocks
• Objekte die eine Berechnung vornehmen
• Prüfen ob eine Funktion aufgerufen wurde
FAKEITEASY
TDD vs. SharePoint
SharePoint bietet nur wenige Interfaces und abstrakte Klassen
In SharePoint werden viele statische und nicht-virtuelle Funktionen und Eigen-schaften benutzt
• SPContext.Current• SPFieldCollection.GetFieldByInternalName
Agenda
Was ist Test-Driven Development?
Testing SharePoint
Microsoft Fakes Mocking Framework
SharePoint Emulators
Fakes (aka Moles)
Build-In Visual Studio 2012Ab Visual Studio Premium Update 2
Faken von sealed, static Methoden und Eigenschaften
Benutzen von bekannten FunktionenAnonymous Delegates und Lambda Expressions
SharePoint Support
Stubs und Shims
StubsStubCustomer()
ShimsShimSPList()
Stubs Mocks
Umleiten von Methodenaufrufen
einer bekannten APIShimSPListItem.Update()
Faking SPContextShimSPContext.CurrentGet = () =>{ return new ShimSPContext() { WebGet = () => { return new ShimSPWeb() { TitleGet = () => "SharePoint Portal", TitleSetString = (value) => newTitle = value }; }, ListItemGet = () => { return new ShimSPListItem() { IDGet = () => 1, TitleGet = () => "ListItem Title" }; } };};
Faking SPContextShimSPContext.CurrentGet = () =>{ return new ShimSPContext() { WebGet = () => { return new ShimSPWeb() { TitleGet = () => "SharePoint Portal", TitleSetString = (value) => newTitle = value }; }, ListItemGet = () => { return new ShimSPListItem() { IDGet = () => 1, TitleGet = () => "ListItem Title" }; } };};
Faking SPContextShimSPContext.CurrentGet = () =>{ return new ShimSPContext() { WebGet = () => { return new ShimSPWeb() { TitleGet = () => "SharePoint Portal", TitleSetString = (value) => newTitle = value }; }, ListItemGet = () => { return new ShimSPListItem() { IDGet = () => 1, TitleGet = () => "ListItem Title" }; } };};
Faking SPContextShimSPContext.CurrentGet = () =>{ return new ShimSPContext() { WebGet = () => { return new ShimSPWeb() { TitleGet = () => "SharePoint Portal", TitleSetString = (value) => newTitle = value }; }, ListItemGet = () => { return new ShimSPListItem() { IDGet = () => 1, TitleGet = () => "ListItem Title" }; } };};
demo
Website Title Changer WebPartEin kleiner TDD WebPart
Was passiert?
Unit Test
KomponenteControl / Event Receiver / Timer Job / etc.
SharePointStub / Shim
Erstellen der Fake Assembly
Framework-Bedingungen
SharePoint 2013 in Fx 4.0Muss von Hand geändert werden
Test-Projekt selbes Fx wie SharePoint-Projekt
SharePoint 2010 in Fx 3.5
demo
Szenario Support-AnfragenDigging Deeper
Zusammenfassung
Faken von allen Intanzen eines Objekts während eines Tests
Benutzen von Stubs und Shims zusammen
In die Schreibweise von Stubs und Shims muss man sich einarbeiten
Agenda
Was ist Test-Driven Development?
Testing SharePoint
Microsoft Fakes Mocking Framework
SharePoint Emulators
SharePoint Emulators
FunktionenImitiert SharePoint APISPSite.Open, SPList.Fields.Add, SPListItem[…]
Erweiterung von Funktionen mit dynamischem Input durch ShimsSPList.GetItems(SPQuery)
demo
SharePoint EmulatorsAchtung Nachahmer!
What’s next?
JavaScript TestingqUnit
Code CoverageVisual Studio, DotCover, NCover
Build ServerAutomated Build
Tools
Visual Studio Unit Test Generatorhttp://bit.ly/13w6xW5
Literatur und Links
The Art of Unit TestingBuch, Roy Osherove
Fakes in der MSDNhttp://msdn.microsoft.com/en-us/library/hh549175.aspx
Visual Studio Test Tooling Guidehttp://vsartesttoolingguide.codeplex.com
Clean CodeBuch, Robert C. Martin
Blog:http://www.dlindemann.de/blog
Email:[email protected]
Community:http://www.brandmysharepoint.de
Daniel LindemannITaCS GmbH
Twitter:@DanielLindemann