SharePoint Testing mit Visual Studio 2012

Post on 19-Jan-2015

1.128 views 1 download

description

Session von d

Transcript of SharePoint Testing mit Visual Studio 2012

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:daniel.lindemann@itacs.de

Community:http://www.brandmysharepoint.de

Daniel LindemannITaCS GmbH

Twitter:@DanielLindemann