SharePoint Testing mit Visual Studio 2012

34
Daniel Lindemann | ITaCS GmbH SharePoint Testing mit Visual Studio 2012

description

Session von d

Transcript of SharePoint Testing mit Visual Studio 2012

Page 1: SharePoint Testing mit Visual Studio 2012

Daniel Lindemann | ITaCS GmbH

SharePoint Testing

mit Visual Studio 2012

Page 2: SharePoint Testing mit Visual Studio 2012

Agenda

Was ist Test-Driven Development?

Testing SharePoint

Microsoft Fakes Mocking Framework

SharePoint Emulators

Page 3: SharePoint Testing mit Visual Studio 2012

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

Page 4: SharePoint Testing mit Visual Studio 2012

TDD ist “interpretierbar”

Test-First MethodeAls Teil eines agilen Softwareentwicklungsprozesses

Legacy Code Testing

Verhalten von Quellcode überprüfen

Page 5: SharePoint Testing mit Visual Studio 2012

Warum TDD?

Steigerung der Codequalität

Bessere Verständnis des Codes

Schnelles Finden von Fehlern

Pünktlich Feierabend

Hohe Flexibilität

Page 6: SharePoint Testing mit Visual Studio 2012

TDD

Refactor

Rot

Grün

Test-First Methode

Page 7: SharePoint Testing mit Visual Studio 2012

Agenda

Was ist Test-Driven Development?

Testing SharePoint

Microsoft Fakes Mocking Framework

SharePoint Emulators

Page 8: SharePoint Testing mit Visual Studio 2012

SharePoint testen… aber wie?

Quelle: http://blog.mercedes-benz-passion.com/2009/05/hamann-vulcano-slr-im-windkanal/

Page 9: SharePoint Testing mit Visual Studio 2012

Was ist “testbarer“ Code?

Abstraktes und Interface-basiertes Design

Kein Konstruktoren mit Logik

Methoden standardmäßig als virtual markieren

Page 10: SharePoint Testing mit Visual Studio 2012

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

Page 11: SharePoint Testing mit Visual Studio 2012

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

Page 12: SharePoint Testing mit Visual Studio 2012

FAKEITEASY

Page 13: SharePoint Testing mit Visual Studio 2012

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

Page 14: SharePoint Testing mit Visual Studio 2012

Agenda

Was ist Test-Driven Development?

Testing SharePoint

Microsoft Fakes Mocking Framework

SharePoint Emulators

Page 15: SharePoint Testing mit Visual Studio 2012

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

Page 16: SharePoint Testing mit Visual Studio 2012

Stubs und Shims

StubsStubCustomer()

ShimsShimSPList()

Stubs Mocks

Umleiten von Methodenaufrufen

einer bekannten APIShimSPListItem.Update()

Page 17: SharePoint Testing mit Visual Studio 2012

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" }; } };};

Page 18: SharePoint Testing mit Visual Studio 2012

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" }; } };};

Page 19: SharePoint Testing mit Visual Studio 2012

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" }; } };};

Page 20: SharePoint Testing mit Visual Studio 2012

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" }; } };};

Page 21: SharePoint Testing mit Visual Studio 2012

demo

Website Title Changer WebPartEin kleiner TDD WebPart

Page 22: SharePoint Testing mit Visual Studio 2012

Was passiert?

Unit Test

KomponenteControl / Event Receiver / Timer Job / etc.

SharePointStub / Shim

Page 23: SharePoint Testing mit Visual Studio 2012

Erstellen der Fake Assembly

Page 24: SharePoint Testing mit Visual Studio 2012

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

Page 25: SharePoint Testing mit Visual Studio 2012

demo

Szenario Support-AnfragenDigging Deeper

Page 26: SharePoint Testing mit Visual Studio 2012

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

Page 27: SharePoint Testing mit Visual Studio 2012

Agenda

Was ist Test-Driven Development?

Testing SharePoint

Microsoft Fakes Mocking Framework

SharePoint Emulators

Page 28: SharePoint Testing mit Visual Studio 2012

SharePoint Emulators

Page 29: SharePoint Testing mit Visual Studio 2012

FunktionenImitiert SharePoint APISPSite.Open, SPList.Fields.Add, SPListItem[…]

Erweiterung von Funktionen mit dynamischem Input durch ShimsSPList.GetItems(SPQuery)

Page 30: SharePoint Testing mit Visual Studio 2012

demo

SharePoint EmulatorsAchtung Nachahmer!

Page 31: SharePoint Testing mit Visual Studio 2012

What’s next?

JavaScript TestingqUnit

Code CoverageVisual Studio, DotCover, NCover

Build ServerAutomated Build

Page 32: SharePoint Testing mit Visual Studio 2012

Tools

Visual Studio Unit Test Generatorhttp://bit.ly/13w6xW5

Page 33: SharePoint Testing mit Visual Studio 2012

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

Page 34: SharePoint Testing mit Visual Studio 2012

Blog:http://www.dlindemann.de/blog

Email:[email protected]

Community:http://www.brandmysharepoint.de

Daniel LindemannITaCS GmbH

Twitter:@DanielLindemann