SlideShare a Scribd company logo
Writing Testable Code in SharePoint
                           Tim McCarthy
                Senior Technical Architect
                                Perficient
Agenda
•   Introduction
•   Repository Pattern
•   IoC and Dependency Injection Patterns
•   Model View Presenter Pattern
•   Unit Testing strategies
•   Summary
Introduction
•   Tightly-coupled SharePoint Code
•   Difficult to test Web Parts and Pages
•   Need a better way to organize the code
•   The answer: Design Patterns!
What is the Repository Pattern?
•   Isolates the domain model from data access
•   Encapsulates the domain object persistence
•   Persistence Ignorance is bliss!
•   Works well when used with interfaces…
Demo
Repository Pattern
What is IoC?
• Inversion of Control
• Depend upon abstract types, not concrete
  types
Benefits of Inversion of Control
• Can swap out implementations later (such as
  different repositories)
• Allows parts of the application to be built
  independently with no complicated
  dependencies
• Can work in ASP.NET and switch over to
  SharePoint later
What is DI?
• DI = Dependency Injection
• One solution to the problem instantiating
  abstract types
• Available DI frameworks
  – Castle
  – Unity
  – MEF
  – Etc.
Benefits of Dependency Injection
• Can write more granular unit tests
• Don’t need to hit the database for testing UI
  logic
• Allows parts of an application to be easily
  swapped out without re-compiling
• Using a DI framework makes it almost
  seamless!
Demo
IoC and Dependency Injection
Model View Presenter Pattern
• Gets the logic out of your UI so it can be
  tested!
• Forced separation of concerns
• Can enable UI logic to be shared
• Side Point: Why not use MVC in SharePoint?
Demo
Model View Presenter
Unit Testing Strategies
• Test the presenters separately
• Use mock views and mock repositories when
  testing the presenters
• Test the concrete repositories separately
Demo
Unit Tests
Summary
• Design Patterns are the key to better
  SharePoint code!
• Repository, IoC and DI patterns make testing
  way easier
• MVP pattern gets the logic out of your UI code
Get the Source Code!
        Source Code Link
Contact Info
             Tim McCarthy
tim.mccarthy@perficient.com
We want your feedback!
                   Use this QR code or visit:
                   http://sps.la/feedback

                   Silver Sponsors:
Victory Lap- social event
  "SharePoint Victory Lap" Social Event for
     SPSLA will be at: 5:30pm to 8pm at
Di Piazzas (5205 E. Pacific Coast Hwy, 90804)

More Related Content

PDF
The Evolution of Software for a Startup
PDF
Architecting for Hyper Growth and Great Engineering Culture
PPTX
Unit Testing and Tools
PPTX
Unit Testing and Tools - ADNUG
PPTX
Introduction To AOP
PDF
Using BladeRunnerJS to Build Front-End Apps that Scale - Fluent 2014
PPTX
Logic appsforbeginners
PDF
2014 August - eXo Software Factory Overview
The Evolution of Software for a Startup
Architecting for Hyper Growth and Great Engineering Culture
Unit Testing and Tools
Unit Testing and Tools - ADNUG
Introduction To AOP
Using BladeRunnerJS to Build Front-End Apps that Scale - Fluent 2014
Logic appsforbeginners
2014 August - eXo Software Factory Overview

What's hot (19)

PDF
Inside Story: Scratching the Black Box - API
PDF
The Magic Behind Faster API Development, Testing and Delivery with API Virtua...
PPTX
Gauge from an end user's perspective-fathima harris
PPTX
Automating functional testing of Flex applications.
PDF
Alex Theedom Java ee revisits design patterns
PPTX
Selenium training eduxfactor
PPTX
Introduction to Aspect Oriented Programming
PPTX
Microsoft Azure Logic Apps - easy way to serverless
PDF
#MFSummit2016 Build: Innovation and the next generation of COBOL applications
PPTX
The UX of Security
PPTX
Api Design
PPTX
A better approach for testing microservices - introducing test kits in practice
PPTX
Use Automation to Assist -Not Replace- Manual Testing
PDF
Continuous Everything @ dotnet cologne 2019
PDF
Elements of DDD with ASP.NET MVC & Entity Framework Code First
PDF
Test automation_strategy_for_legacysystems
PDF
New Enterprisre Capabilities in Telerik Platform
PDF
How to Effectively Test Your Chatbot | Rasa Summit
PPTX
Accelerating time to delivery modern tools for cobol development
Inside Story: Scratching the Black Box - API
The Magic Behind Faster API Development, Testing and Delivery with API Virtua...
Gauge from an end user's perspective-fathima harris
Automating functional testing of Flex applications.
Alex Theedom Java ee revisits design patterns
Selenium training eduxfactor
Introduction to Aspect Oriented Programming
Microsoft Azure Logic Apps - easy way to serverless
#MFSummit2016 Build: Innovation and the next generation of COBOL applications
The UX of Security
Api Design
A better approach for testing microservices - introducing test kits in practice
Use Automation to Assist -Not Replace- Manual Testing
Continuous Everything @ dotnet cologne 2019
Elements of DDD with ASP.NET MVC & Entity Framework Code First
Test automation_strategy_for_legacysystems
New Enterprisre Capabilities in Telerik Platform
How to Effectively Test Your Chatbot | Rasa Summit
Accelerating time to delivery modern tools for cobol development
Ad

Similar to Writing Testable Code in SharePoint (20)

PPTX
Acing application lifecycle management in SharePoint
PDF
CUST-3 Document Management with Share
PPT
Lean-Agile SharePoint Development
PDF
Lifecycle Management with SharePoint Apps and Solutions
PPTX
Vs11 overview
PPTX
Coding Standard And Code Review
PDF
Software Architecture and Architectors: useless VS valuable
PDF
2019-Nov: Domain Driven Design (DDD) and when not to use it
PPT
Cloud native
PDF
SE2016 Java Alex Theedom "Java EE revisits design patterns"
PDF
Crafting ColdFusion Applications like an Architect
PDF
SharePoint Custom Development
PPTX
Leveraging Force.com: What, Why & Hows?
PDF
Ten Advices for Architects
PPTX
Object-Relational Mapping and Dependency Injection
PPTX
Build software like a bag of marbles, not a castle of LEGO®
PDF
10 Hinweise für Architekten
PDF
Patterns and practices for building enterprise-scale HTML5 apps
PPTX
Lean-Agile Development with SharePoint - Bill Ayers
PDF
Sitecore development approach evolution – destination helix
Acing application lifecycle management in SharePoint
CUST-3 Document Management with Share
Lean-Agile SharePoint Development
Lifecycle Management with SharePoint Apps and Solutions
Vs11 overview
Coding Standard And Code Review
Software Architecture and Architectors: useless VS valuable
2019-Nov: Domain Driven Design (DDD) and when not to use it
Cloud native
SE2016 Java Alex Theedom "Java EE revisits design patterns"
Crafting ColdFusion Applications like an Architect
SharePoint Custom Development
Leveraging Force.com: What, Why & Hows?
Ten Advices for Architects
Object-Relational Mapping and Dependency Injection
Build software like a bag of marbles, not a castle of LEGO®
10 Hinweise für Architekten
Patterns and practices for building enterprise-scale HTML5 apps
Lean-Agile Development with SharePoint - Bill Ayers
Sitecore development approach evolution – destination helix
Ad

Recently uploaded (20)

PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PPTX
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
PPTX
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
PPTX
Cloud computing and distributed systems.
PPT
“AI and Expert System Decision Support & Business Intelligence Systems”
PDF
cuic standard and advanced reporting.pdf
PDF
Approach and Philosophy of On baking technology
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PPTX
Understanding_Digital_Forensics_Presentation.pptx
PPTX
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
PPTX
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
PDF
CIFDAQ's Market Insight: SEC Turns Pro Crypto
PPT
Teaching material agriculture food technology
PPTX
MYSQL Presentation for SQL database connectivity
PDF
NewMind AI Weekly Chronicles - August'25 Week I
PDF
Network Security Unit 5.pdf for BCA BBA.
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
Building Integrated photovoltaic BIPV_UPV.pdf
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
Digital-Transformation-Roadmap-for-Companies.pptx
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
Agricultural_Statistics_at_a_Glance_2022_0.pdf
Cloud computing and distributed systems.
“AI and Expert System Decision Support & Business Intelligence Systems”
cuic standard and advanced reporting.pdf
Approach and Philosophy of On baking technology
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
Understanding_Digital_Forensics_Presentation.pptx
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
CIFDAQ's Market Insight: SEC Turns Pro Crypto
Teaching material agriculture food technology
MYSQL Presentation for SQL database connectivity
NewMind AI Weekly Chronicles - August'25 Week I
Network Security Unit 5.pdf for BCA BBA.
Build a system with the filesystem maintained by OSTree @ COSCUP 2025

Writing Testable Code in SharePoint

  • 1. Writing Testable Code in SharePoint Tim McCarthy Senior Technical Architect Perficient
  • 2. Agenda • Introduction • Repository Pattern • IoC and Dependency Injection Patterns • Model View Presenter Pattern • Unit Testing strategies • Summary
  • 3. Introduction • Tightly-coupled SharePoint Code • Difficult to test Web Parts and Pages • Need a better way to organize the code • The answer: Design Patterns!
  • 4. What is the Repository Pattern? • Isolates the domain model from data access • Encapsulates the domain object persistence • Persistence Ignorance is bliss! • Works well when used with interfaces…
  • 6. What is IoC? • Inversion of Control • Depend upon abstract types, not concrete types
  • 7. Benefits of Inversion of Control • Can swap out implementations later (such as different repositories) • Allows parts of the application to be built independently with no complicated dependencies • Can work in ASP.NET and switch over to SharePoint later
  • 8. What is DI? • DI = Dependency Injection • One solution to the problem instantiating abstract types • Available DI frameworks – Castle – Unity – MEF – Etc.
  • 9. Benefits of Dependency Injection • Can write more granular unit tests • Don’t need to hit the database for testing UI logic • Allows parts of an application to be easily swapped out without re-compiling • Using a DI framework makes it almost seamless!
  • 11. Model View Presenter Pattern • Gets the logic out of your UI so it can be tested! • Forced separation of concerns • Can enable UI logic to be shared • Side Point: Why not use MVC in SharePoint?
  • 13. Unit Testing Strategies • Test the presenters separately • Use mock views and mock repositories when testing the presenters • Test the concrete repositories separately
  • 15. Summary • Design Patterns are the key to better SharePoint code! • Repository, IoC and DI patterns make testing way easier • MVP pattern gets the logic out of your UI code
  • 16. Get the Source Code! Source Code Link
  • 17. Contact Info Tim McCarthy tim.mccarthy@perficient.com
  • 18. We want your feedback! Use this QR code or visit: http://sps.la/feedback Silver Sponsors:
  • 19. Victory Lap- social event "SharePoint Victory Lap" Social Event for SPSLA will be at: 5:30pm to 8pm at Di Piazzas (5205 E. Pacific Coast Hwy, 90804)

Editor's Notes

  • #4: Many developers forget good object-oriented design techniques when developing in SharePoint, most of the time because they get overwhelmed by the framework. Unit testing often gets thrown out of the window, and most of the time the application becomes very tightly coupled to the SharePoint object model. This talk will demonstrate how to overcome these obstacles and build solid SharePoint application code that is much more testable and is easier to maintain.The vehicle for this goodness is design patterns!
  • #5: Using the repository pattern will allow you to develop outside of the SharePoint environment "up until the last minute"
  • #8: Depend on abstract types (interfaces) instead of concrete classes!Don’t need a big bulky 64-bit Windows 2008 Server virtual machine until much later!
  • #12: MVP is good for web forms projects, which is what SharePoint is based uponModel: Defines the data to be displayed or acted upon in the UIView: UI that displays data from the Model and routes user commands to the Presenter to act upon the dataPresenter: Acts upon the model and the ViewWith MVP, the idea is to strip as much logic and code out of the UI and make it do simple things, like data binding and and acting as a facade to the various UI element properties, i.e. expose TextBox.Text property as FirstName.This pattern really pays for itself when you find bugs in the UI logic…just write a failing unit test and fix the code so it passes the test!Very difficult to use MVC in SharePoint, not worth the effort
  • #14: Doing TDD by the letter takes a lot of discipline. Once you start doing it, it can become a habit. But even if you don't write your tests first, if you use DI + MVP + tests later, you still will benefit from the modularity and freedom to refactor your code.Writing tests can take up time initially, but the payoff happens in spades once you have to identify and fix bugs, or refactor your code with confidence of not breaking anything else.Mock up your views and repositories so you only test what is necessary...that way your tests are really focused. You can (and should) do integration tests later where you use the real repositories. Once you have a pretty good suite of tests developed, you can freely make changes to your code and see if your tests still pass. Refactor, compile, re-test.Rinse, lather, repeat!