SlideShare ist ein Scribd-Unternehmen logo
1 von 34
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 Methode
Als 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
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 Principle
A class should have one, and only one, reason to change.
Open Close Principle
You should be able to extend a classes behavior, without modifying it.
Liskov Substitution Principle
Derived classes must be substitutable for their base classes.
Interface Segregation Principle
Make fine grained interfaces that are client specific.
Dependency Inversion Principle
Depend 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
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 2012
Ab Visual Studio Premium Update 2
Faken von sealed, static Methoden und
Eigenschaften
Benutzen von bekannten Funktionen
Anonymous Delegates und Lambda Expressions
SharePoint Support
Stubs und Shims
Stubs
StubCustomer()
Shims
ShimSPList()
Stubs Mocks
Umleiten von
Methodenaufrufen
einer bekannten API
ShimSPListItem.Update()
Faking SPContext
ShimSPContext.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 SPContext
ShimSPContext.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 SPContext
ShimSPContext.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 SPContext
ShimSPContext.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 WebPart
Ein kleiner TDD WebPart
Was passiert?
Unit Test
Komponente
Control / Event Receiver / Timer Job / etc.
SharePointStub / Shim
Erstellen der Fake Assembly
Framework-Bedingungen
SharePoint 2013 in Fx 4.0
Muss von Hand geändert werden
Test-Projekt selbes Fx wie SharePoint-
Projekt
SharePoint 2010 in Fx 3.5
demo
Szenario Support-Anfragen
Digging 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
Funktionen
Imitiert SharePoint API
SPSite.Open, SPList.Fields.Add, SPListItem[…]
Erweiterung von Funktionen mit
dynamischem Input durch Shims
SPList.GetItems(SPQuery)
demo
SharePoint Emulators
Achtung Nachahmer!
What’s next?
JavaScript Testing
qUnit
Code Coverage
Visual Studio, DotCover, NCover
Build Server
Automated Build
Tools
Visual Studio Unit Test Generator
http://bit.ly/13w6xW5
Literatur und Links
The Art of Unit Testing
Buch, Roy Osherove
Fakes in der MSDN
http://msdn.microsoft.com/en-us/library/hh549175.aspx
Visual Studio Test Tooling Guide
http://vsartesttoolingguide.codeplex.com
Clean Code
Buch, Robert C. Martin
Blog:
http://www.dlindemann.de/blog
Email:
daniel.lindemann@itacs.de
Community:
http://www.brandmysharepoint.de
Daniel Lindemann
ITaCS GmbH
Twitter:
@DanielLindemann

Weitere ähnliche Inhalte

Ähnlich wie SharePoint Testing mit Visual Studio 2012

Dokumentation durch automatisierte Akzeptanztests
Dokumentation durch automatisierte AkzeptanztestsDokumentation durch automatisierte Akzeptanztests
Dokumentation durch automatisierte AkzeptanztestsSebastian Sanitz
 
Automatisierte GUI-Tests mit Selenium
Automatisierte GUI-Tests mit SeleniumAutomatisierte GUI-Tests mit Selenium
Automatisierte GUI-Tests mit SeleniumBenjamin Schmid
 
Kennst du ein Unternehmen, dass erfolgreich die QS outtasked hat?“
Kennst du einUnternehmen, dass erfolgreichdie QS outtasked hat?“Kennst du einUnternehmen, dass erfolgreichdie QS outtasked hat?“
Kennst du ein Unternehmen, dass erfolgreich die QS outtasked hat?“hpaustria
 
Data Scraping with Excel - Campixx 2013 - Maik Schmidt
Data Scraping with Excel - Campixx 2013 - Maik SchmidtData Scraping with Excel - Campixx 2013 - Maik Schmidt
Data Scraping with Excel - Campixx 2013 - Maik SchmidtMaik Schmidt
 
Python in der Luft- und Raumfahrt
Python in der Luft- und RaumfahrtPython in der Luft- und Raumfahrt
Python in der Luft- und RaumfahrtAndreas Schreiber
 
Wartbare Oberflächentests mit Open-Source-Software
Wartbare Oberflächentests mit Open-Source-SoftwareWartbare Oberflächentests mit Open-Source-Software
Wartbare Oberflächentests mit Open-Source-SoftwareOliver Libutzki
 
Abläufe mit PHP und Phing automatisieren
Abläufe mit PHP und Phing automatisierenAbläufe mit PHP und Phing automatisieren
Abläufe mit PHP und Phing automatisierenChristian Münch
 
BASTA! Spring 2017 - C# Script in Action
BASTA! Spring 2017 - C# Script in ActionBASTA! Spring 2017 - C# Script in Action
BASTA! Spring 2017 - C# Script in ActionRobin Sedlaczek
 
Mögen die Tests mit dir sein
Mögen die Tests mit dir seinMögen die Tests mit dir sein
Mögen die Tests mit dir seincodepitbull
 
Offline Strategien für HTML5 Web Applikationen - dwx13
Offline Strategien für HTML5 Web Applikationen - dwx13 Offline Strategien für HTML5 Web Applikationen - dwx13
Offline Strategien für HTML5 Web Applikationen - dwx13 Stephan Hochdörfer
 
Test-driven Development mit TYPO3
Test-driven Development mit TYPO3Test-driven Development mit TYPO3
Test-driven Development mit TYPO3Oliver Klee
 
Dokumentation schreiben kann spass machen
Dokumentation schreiben kann spass machenDokumentation schreiben kann spass machen
Dokumentation schreiben kann spass machenSebastian Hempel
 
FMK2014: FileMaker Plugin erzeugen by Christian Schmitz
FMK2014: FileMaker Plugin erzeugen by Christian SchmitzFMK2014: FileMaker Plugin erzeugen by Christian Schmitz
FMK2014: FileMaker Plugin erzeugen by Christian SchmitzVerein FM Konferenz
 
REST mit APEX 18.1
REST mit APEX 18.1REST mit APEX 18.1
REST mit APEX 18.1Oliver Lemm
 
Legacy Code refaktorisieren
Legacy Code refaktorisierenLegacy Code refaktorisieren
Legacy Code refaktorisierenHendrik Lösch
 
Einführung React Native
Einführung React NativeEinführung React Native
Einführung React NativeMarkus Günther
 
Optimierung von JPA-Anwendungen
Optimierung von JPA-AnwendungenOptimierung von JPA-Anwendungen
Optimierung von JPA-Anwendungengedoplan
 

Ähnlich wie SharePoint Testing mit Visual Studio 2012 (20)

Dokumentation durch automatisierte Akzeptanztests
Dokumentation durch automatisierte AkzeptanztestsDokumentation durch automatisierte Akzeptanztests
Dokumentation durch automatisierte Akzeptanztests
 
Wicket Kurzübersicht
Wicket KurzübersichtWicket Kurzübersicht
Wicket Kurzübersicht
 
TypeScript
TypeScriptTypeScript
TypeScript
 
Automatisierte GUI-Tests mit Selenium
Automatisierte GUI-Tests mit SeleniumAutomatisierte GUI-Tests mit Selenium
Automatisierte GUI-Tests mit Selenium
 
Kennst du ein Unternehmen, dass erfolgreich die QS outtasked hat?“
Kennst du einUnternehmen, dass erfolgreichdie QS outtasked hat?“Kennst du einUnternehmen, dass erfolgreichdie QS outtasked hat?“
Kennst du ein Unternehmen, dass erfolgreich die QS outtasked hat?“
 
Data Scraping with Excel - Campixx 2013 - Maik Schmidt
Data Scraping with Excel - Campixx 2013 - Maik SchmidtData Scraping with Excel - Campixx 2013 - Maik Schmidt
Data Scraping with Excel - Campixx 2013 - Maik Schmidt
 
Python in der Luft- und Raumfahrt
Python in der Luft- und RaumfahrtPython in der Luft- und Raumfahrt
Python in der Luft- und Raumfahrt
 
Wartbare Oberflächentests mit Open-Source-Software
Wartbare Oberflächentests mit Open-Source-SoftwareWartbare Oberflächentests mit Open-Source-Software
Wartbare Oberflächentests mit Open-Source-Software
 
Abläufe mit PHP und Phing automatisieren
Abläufe mit PHP und Phing automatisierenAbläufe mit PHP und Phing automatisieren
Abläufe mit PHP und Phing automatisieren
 
BASTA! Spring 2017 - C# Script in Action
BASTA! Spring 2017 - C# Script in ActionBASTA! Spring 2017 - C# Script in Action
BASTA! Spring 2017 - C# Script in Action
 
Mögen die Tests mit dir sein
Mögen die Tests mit dir seinMögen die Tests mit dir sein
Mögen die Tests mit dir sein
 
Offline Strategien für HTML5 Web Applikationen - dwx13
Offline Strategien für HTML5 Web Applikationen - dwx13 Offline Strategien für HTML5 Web Applikationen - dwx13
Offline Strategien für HTML5 Web Applikationen - dwx13
 
Test-driven Development mit TYPO3
Test-driven Development mit TYPO3Test-driven Development mit TYPO3
Test-driven Development mit TYPO3
 
Dokumentation schreiben kann spass machen
Dokumentation schreiben kann spass machenDokumentation schreiben kann spass machen
Dokumentation schreiben kann spass machen
 
react-de.pdf
react-de.pdfreact-de.pdf
react-de.pdf
 
FMK2014: FileMaker Plugin erzeugen by Christian Schmitz
FMK2014: FileMaker Plugin erzeugen by Christian SchmitzFMK2014: FileMaker Plugin erzeugen by Christian Schmitz
FMK2014: FileMaker Plugin erzeugen by Christian Schmitz
 
REST mit APEX 18.1
REST mit APEX 18.1REST mit APEX 18.1
REST mit APEX 18.1
 
Legacy Code refaktorisieren
Legacy Code refaktorisierenLegacy Code refaktorisieren
Legacy Code refaktorisieren
 
Einführung React Native
Einführung React NativeEinführung React Native
Einführung React Native
 
Optimierung von JPA-Anwendungen
Optimierung von JPA-AnwendungenOptimierung von JPA-Anwendungen
Optimierung von JPA-Anwendungen
 

SharePoint Testing mit Visual Studio 2012

Hinweis der Redaktion

  1. Bei TDD wird durch ein automatisiertes Stück Code überprüft ob eine oder mehrere Annahmen über eine Methode/Funktion/Klasse logisch korrekt sindTesten von Code ohne Bezug auf Abhängigkeiten wie Datenbanken oder das Dateisystem
  2. Stub= einfacheListeodernur TextMock = ErwirdeineBerechnunggemacht; Geprüft ob eine Funktion aufgerufen wurde; Wie ein Spion