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...
TDD ist “interpretierbar”
Test-First Methode
Als Teil eines agilen Softwareentwicklungsprozesses
Legacy Code Testing
Verha...
Warum TDD?
Steigerung der Codequalität
Bessere Verständnis des Codes
Schnelles Finden von Fehlern
Pünktlich Feierabend 
H...
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 al...
S
O
L
I
D
Single Responsibility Principle
A class should have one, and only one, reason to change.
Open Close Principle
Yo...
Stubs und Mocks
Stubs
• Einfache Objekte
z.B. Liste oder nur Text
Mocks
• Objekte die eine
Berechnung vornehmen
• Prüfen o...
TDD vs. SharePoint
SharePoint bietet nur wenige Interfaces
und abstrakte Klassen
In SharePoint werden viele statische und
...
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
Eige...
Stubs und Shims
Stubs
StubCustomer()
Shims
ShimSPList()
Stubs Mocks
Umleiten von
Methodenaufrufen
einer bekannten API
Shim...
Faking SPContext
ShimSPContext.CurrentGet = () =>
{
return new ShimSPContext()
{
WebGet = () =>
{
return new ShimSPWeb()
{...
Faking SPContext
ShimSPContext.CurrentGet = () =>
{
return new ShimSPContext()
{
WebGet = () =>
{
return new ShimSPWeb()
{...
Faking SPContext
ShimSPContext.CurrentGet = () =>
{
return new ShimSPContext()
{
WebGet = () =>
{
return new ShimSPWeb()
{...
Faking SPContext
ShimSPContext.CurrentGet = () =>
{
return new ShimSPContext()
{
WebGet = () =>
{
return new ShimSPWeb()
{...
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-
Proje...
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 Sc...
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
dynamische...
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/h...
Blog:
http://www.dlindemann.de/blog
Email:
daniel.lindemann@itacs.de
Community:
http://www.brandmysharepoint.de
Daniel Lin...
SharePoint Testing mit Visual Studio 2012
Upcoming SlideShare
Loading in...5
×

SharePoint Testing mit Visual Studio 2012

1,253

Published on

Session von d

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,253
On Slideshare
0
From Embeds
0
Number of Embeds
7
Actions
Shares
0
Downloads
3
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide
  • 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
  • Stub= einfacheListeodernur TextMock = ErwirdeineBerechnunggemacht; Geprüft ob eine Funktion aufgerufen wurde; Wie ein Spion
  • SharePoint Testing mit Visual Studio 2012

    1. 1. Daniel Lindemann | ITaCS GmbH SharePoint Testing mit Visual Studio 2012
    2. 2. Agenda Was ist Test-Driven Development? Testing SharePoint Microsoft Fakes Mocking Framework SharePoint Emulators
    3. 3. 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
    4. 4. TDD ist “interpretierbar” Test-First Methode Als Teil eines agilen Softwareentwicklungsprozesses Legacy Code Testing Verhalten von Quellcode überprüfen
    5. 5. Warum TDD? Steigerung der Codequalität Bessere Verständnis des Codes Schnelles Finden von Fehlern Pünktlich Feierabend  Hohe Flexibilität
    6. 6. Refactor Rot Grün Test-First Methode
    7. 7. Agenda Was ist Test-Driven Development? Testing SharePoint Microsoft Fakes Mocking Framework SharePoint Emulators
    8. 8. SharePoint testen… aber wie? Quelle: http://blog.mercedes-benz-passion.com/2009/05/hamann-vulcano-slr-im-windkanal/
    9. 9. Was ist “testbarer“ Code? Abstraktes und Interface-basiertes Design Kein Konstruktoren mit Logik Methoden standardmäßig als virtual markieren
    10. 10. 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
    11. 11. 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
    12. 12. 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
    13. 13. Agenda Was ist Test-Driven Development? Testing SharePoint Microsoft Fakes Mocking Framework SharePoint Emulators
    14. 14. 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
    15. 15. Stubs und Shims Stubs StubCustomer() Shims ShimSPList() Stubs Mocks Umleiten von Methodenaufrufen einer bekannten API ShimSPListItem.Update()
    16. 16. 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" }; } }; };
    17. 17. 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" }; } }; };
    18. 18. 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" }; } }; };
    19. 19. 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" }; } }; };
    20. 20. demo Website Title Changer WebPart Ein kleiner TDD WebPart
    21. 21. Was passiert? Unit Test Komponente Control / Event Receiver / Timer Job / etc. SharePointStub / Shim
    22. 22. Erstellen der Fake Assembly
    23. 23. 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
    24. 24. demo Szenario Support-Anfragen Digging Deeper
    25. 25. 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
    26. 26. Agenda Was ist Test-Driven Development? Testing SharePoint Microsoft Fakes Mocking Framework SharePoint Emulators
    27. 27. SharePoint Emulators
    28. 28. Funktionen Imitiert SharePoint API SPSite.Open, SPList.Fields.Add, SPListItem[…] Erweiterung von Funktionen mit dynamischem Input durch Shims SPList.GetItems(SPQuery)
    29. 29. demo SharePoint Emulators Achtung Nachahmer!
    30. 30. What’s next? JavaScript Testing qUnit Code Coverage Visual Studio, DotCover, NCover Build Server Automated Build
    31. 31. Tools Visual Studio Unit Test Generator http://bit.ly/13w6xW5
    32. 32. 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
    33. 33. Blog: http://www.dlindemann.de/blog Email: daniel.lindemann@itacs.de Community: http://www.brandmysharepoint.de Daniel Lindemann ITaCS GmbH Twitter: @DanielLindemann
    1. A particular slide catching your eye?

      Clipping is a handy way to collect important slides you want to go back to later.

    ×