SlideShare une entreprise Scribd logo
1  sur  19
Testing Everything for ASP.NET MVC
Applications
Matt Honeycutt
@matthoneycutt
http://trycatchfail.com
Not this kind of testing…
What we’ll cover:
• Required Tools
• Testing an ASP.NET MVC controller
1) Unit Testing C#
• Required Tools
• Testing a Knockout view model
• Testing jQuery and DOM manipulation
2) Unit Testing JavaScript
• Intro to SpecsFor.Mvc
• Implementing a new feature TDD-style
3) End-to-End Testing
Heroic Support
Support
Request
•E-mail
•Website
Tracking
•See what’s waiting
•Tag and categorize
Response
•Reply via E-mail
•See conversations
Given-When-Then
Given… • a ticket
exists
When…
• a user
views the
ticket
Then…
•It displays the ticket
title
•It displays the ticket
body
•It displays the
submitter’s name
Given a ticket exists, when a user views the ticket, then it displays the ticket title, it displays
the ticket body, and it displays the submitter’s name.
Unit-Testing with C# in ASP.NET MVC
Base Class for Specs
• Built on NUnit
• Auto-mocking container
• Supports DRY testing
with Spec-style tests
• Use as little or as much
as you want
Includes Solutions to
Common Problems
• Moq – Mocking
framework
• Should – Assertion
extension methods
• ExpectedObjects –
Compare objects cleanly
Additional Helpers
• Additional assertion
extension methods
• Extensions simplify to
Moq and
ExpectedObjects
Demo: Testing an MVC Action
Given… • No state
When…
• Someone
submits a
new ticket
Then…
• It displays a
success message
• It saves the ticket
• It redirects back
to the dashboard
When someone submits a new ticket, it displays a success message, it saves the ticket, and it
redirects back to the dashboard
Another example
Given… • a ticket
exists
When…
• a user
views the
ticket
Then…
•It displays the ticket
title
•It displays the ticket
body
•It displays the
submitter’s E-mail
Given a ticket exists, when a user views the ticket, it displays the ticket title, it displays the
ticket body, and it displays the submitter’s E-mail.
Testing JavaScript with
Given-When-Then
Given…
• a ticket
view
model
When… • saving
tags
Then…
• it saves tags to
the server
• it displays a
success message
Given a ticket view model, when saving tags, it saves tags to the server, and it displays a
success message.
Jasmine Specifications
Describe…
• a ticket
view
model
Describe…
• when
saving
tags
It…
• saves tags to the
server
• displays a
success message
Given a ticket view model, when saving tags, it saves tags to the server, and it displays a
success message.
Unit-Testing a Knockout View Model
ASP.NET Application
Host
• Built on IIS Express
• Deploy and host your
app when you run your
tests
• Includes a “stub” SMTP
server
Abstraction Over
Selenium Web
Driver
• Handles browser driver
management
• Provides simplified API
for common operations
Strongly-Typed API
for Browser
Automation
• Unit-test like syntax
• Navigation and page
manipulation based on
lambda expressions
End-to-End Tests with…
Authentication
Given… • a user
exists
When…
• logging in
with valid
credentials
Then…
• it redirects
to the
dashboard
Given a user exists, when logging in with valid credentials, it redirects to the dashboard.
End-to-End Tests for ASP.NET MVC
Replying to a Ticket
Given…
• there is an
existing
ticket
When…
• when
replying to
the ticket
Then…
• it sends the response
to the submitter
• it displays the response
on the ticket
Given there is an existing ticket, when replying to a ticket, then it sends the response to the
submitter and displays the response on the ticket.
Test your client-side JavaScript
Test your server-side C#
Test your app end-to-end
Want More?
• Last session of the day, learn about cloud-enabling this app!
Come see me tomorrow!
•
Install SpecsFor and SpecsFor.Mvc
• @matthoneycutt
Ping me online:
• http://trycatchfail.com
Follow my blog:

Contenu connexe

Similaire à Testing Everything for ASP.NET MVC Applications

ASP.NET MVC 2.0
ASP.NET MVC 2.0ASP.NET MVC 2.0
ASP.NET MVC 2.0Buu Nguyen
 
JavaOne2016 - How to Generate Customized Java 8 Code from Your Database [TUT4...
JavaOne2016 - How to Generate Customized Java 8 Code from Your Database [TUT4...JavaOne2016 - How to Generate Customized Java 8 Code from Your Database [TUT4...
JavaOne2016 - How to Generate Customized Java 8 Code from Your Database [TUT4...Speedment, Inc.
 
How to JavaOne 2016 - Generate Customized Java 8 Code from Your Database [TUT...
How to JavaOne 2016 - Generate Customized Java 8 Code from Your Database [TUT...How to JavaOne 2016 - Generate Customized Java 8 Code from Your Database [TUT...
How to JavaOne 2016 - Generate Customized Java 8 Code from Your Database [TUT...Malin Weiss
 
Getting started with MVC 5 and Visual Studio 2013
Getting started with MVC 5 and Visual Studio 2013Getting started with MVC 5 and Visual Studio 2013
Getting started with MVC 5 and Visual Studio 2013Thomas Robbins
 
Web Technologies in Java EE 7
Web Technologies in Java EE 7Web Technologies in Java EE 7
Web Technologies in Java EE 7Lukáš Fryč
 
Struts 2 - Introduction
Struts 2 - Introduction Struts 2 - Introduction
Struts 2 - Introduction Hitesh-Java
 
ASP.NET MVC_Routing_Authentication_Aurhorization.pdf
ASP.NET MVC_Routing_Authentication_Aurhorization.pdfASP.NET MVC_Routing_Authentication_Aurhorization.pdf
ASP.NET MVC_Routing_Authentication_Aurhorization.pdfsetit72024
 
Session 41 - Struts 2 Introduction
Session 41 - Struts 2 IntroductionSession 41 - Struts 2 Introduction
Session 41 - Struts 2 IntroductionPawanMM
 
Struts 2 - Hibernate Integration
Struts 2 - Hibernate Integration Struts 2 - Hibernate Integration
Struts 2 - Hibernate Integration Hitesh-Java
 
Session 42 - Struts 2 Hibernate Integration
Session 42 - Struts 2 Hibernate IntegrationSession 42 - Struts 2 Hibernate Integration
Session 42 - Struts 2 Hibernate IntegrationPawanMM
 
Azure Application insights - An Introduction
Azure Application insights - An IntroductionAzure Application insights - An Introduction
Azure Application insights - An IntroductionMatthias Güntert
 

Similaire à Testing Everything for ASP.NET MVC Applications (20)

ASP.NET MVC 2.0
ASP.NET MVC 2.0ASP.NET MVC 2.0
ASP.NET MVC 2.0
 
ASP.NET MVC 3
ASP.NET MVC 3ASP.NET MVC 3
ASP.NET MVC 3
 
JavaOne2016 - How to Generate Customized Java 8 Code from Your Database [TUT4...
JavaOne2016 - How to Generate Customized Java 8 Code from Your Database [TUT4...JavaOne2016 - How to Generate Customized Java 8 Code from Your Database [TUT4...
JavaOne2016 - How to Generate Customized Java 8 Code from Your Database [TUT4...
 
How to JavaOne 2016 - Generate Customized Java 8 Code from Your Database [TUT...
How to JavaOne 2016 - Generate Customized Java 8 Code from Your Database [TUT...How to JavaOne 2016 - Generate Customized Java 8 Code from Your Database [TUT...
How to JavaOne 2016 - Generate Customized Java 8 Code from Your Database [TUT...
 
Getting started with MVC 5 and Visual Studio 2013
Getting started with MVC 5 and Visual Studio 2013Getting started with MVC 5 and Visual Studio 2013
Getting started with MVC 5 and Visual Studio 2013
 
Angular js for Beginnners
Angular js for BeginnnersAngular js for Beginnners
Angular js for Beginnners
 
IP Unit 2.pptx
IP Unit 2.pptxIP Unit 2.pptx
IP Unit 2.pptx
 
Windows 8 Metro apps and the outside world
Windows 8 Metro apps and the outside worldWindows 8 Metro apps and the outside world
Windows 8 Metro apps and the outside world
 
Web Technologies in Java EE 7
Web Technologies in Java EE 7Web Technologies in Java EE 7
Web Technologies in Java EE 7
 
Asp.Net MVC 5 in Arabic
Asp.Net MVC 5 in ArabicAsp.Net MVC 5 in Arabic
Asp.Net MVC 5 in Arabic
 
Angular js
Angular jsAngular js
Angular js
 
Struts 2 - Introduction
Struts 2 - Introduction Struts 2 - Introduction
Struts 2 - Introduction
 
ASP.NET MVC_Routing_Authentication_Aurhorization.pdf
ASP.NET MVC_Routing_Authentication_Aurhorization.pdfASP.NET MVC_Routing_Authentication_Aurhorization.pdf
ASP.NET MVC_Routing_Authentication_Aurhorization.pdf
 
Angular js
Angular jsAngular js
Angular js
 
Session 41 - Struts 2 Introduction
Session 41 - Struts 2 IntroductionSession 41 - Struts 2 Introduction
Session 41 - Struts 2 Introduction
 
Struts 2 - Hibernate Integration
Struts 2 - Hibernate Integration Struts 2 - Hibernate Integration
Struts 2 - Hibernate Integration
 
Next stop: Spring 4
Next stop: Spring 4Next stop: Spring 4
Next stop: Spring 4
 
Session 42 - Struts 2 Hibernate Integration
Session 42 - Struts 2 Hibernate IntegrationSession 42 - Struts 2 Hibernate Integration
Session 42 - Struts 2 Hibernate Integration
 
Mvc fundamental
Mvc fundamentalMvc fundamental
Mvc fundamental
 
Azure Application insights - An Introduction
Azure Application insights - An IntroductionAzure Application insights - An Introduction
Azure Application insights - An Introduction
 

Dernier

FDO for Camera, Sensor and Networking Device – Commercial Solutions from VinC...
FDO for Camera, Sensor and Networking Device – Commercial Solutions from VinC...FDO for Camera, Sensor and Networking Device – Commercial Solutions from VinC...
FDO for Camera, Sensor and Networking Device – Commercial Solutions from VinC...FIDO Alliance
 
A Business-Centric Approach to Design System Strategy
A Business-Centric Approach to Design System StrategyA Business-Centric Approach to Design System Strategy
A Business-Centric Approach to Design System StrategyUXDXConf
 
Simplified FDO Manufacturing Flow with TPMs _ Liam at Infineon.pdf
Simplified FDO Manufacturing Flow with TPMs _ Liam at Infineon.pdfSimplified FDO Manufacturing Flow with TPMs _ Liam at Infineon.pdf
Simplified FDO Manufacturing Flow with TPMs _ Liam at Infineon.pdfFIDO Alliance
 
BT & Neo4j _ How Knowledge Graphs help BT deliver Digital Transformation.pptx
BT & Neo4j _ How Knowledge Graphs help BT deliver Digital Transformation.pptxBT & Neo4j _ How Knowledge Graphs help BT deliver Digital Transformation.pptx
BT & Neo4j _ How Knowledge Graphs help BT deliver Digital Transformation.pptxNeo4j
 
Using IESVE for Room Loads Analysis - UK & Ireland
Using IESVE for Room Loads Analysis - UK & IrelandUsing IESVE for Room Loads Analysis - UK & Ireland
Using IESVE for Room Loads Analysis - UK & IrelandIES VE
 
Structuring Teams and Portfolios for Success
Structuring Teams and Portfolios for SuccessStructuring Teams and Portfolios for Success
Structuring Teams and Portfolios for SuccessUXDXConf
 
AI mind or machine power point presentation
AI mind or machine power point presentationAI mind or machine power point presentation
AI mind or machine power point presentationyogeshlabana357357
 
What's New in Teams Calling, Meetings and Devices April 2024
What's New in Teams Calling, Meetings and Devices April 2024What's New in Teams Calling, Meetings and Devices April 2024
What's New in Teams Calling, Meetings and Devices April 2024Stephanie Beckett
 
Intro in Product Management - Коротко про професію продакт менеджера
Intro in Product Management - Коротко про професію продакт менеджераIntro in Product Management - Коротко про професію продакт менеджера
Intro in Product Management - Коротко про професію продакт менеджераMark Opanasiuk
 
Oauth 2.0 Introduction and Flows with MuleSoft
Oauth 2.0 Introduction and Flows with MuleSoftOauth 2.0 Introduction and Flows with MuleSoft
Oauth 2.0 Introduction and Flows with MuleSoftshyamraj55
 
Your enemies use GenAI too - staying ahead of fraud with Neo4j
Your enemies use GenAI too - staying ahead of fraud with Neo4jYour enemies use GenAI too - staying ahead of fraud with Neo4j
Your enemies use GenAI too - staying ahead of fraud with Neo4jNeo4j
 
AI presentation and introduction - Retrieval Augmented Generation RAG 101
AI presentation and introduction - Retrieval Augmented Generation RAG 101AI presentation and introduction - Retrieval Augmented Generation RAG 101
AI presentation and introduction - Retrieval Augmented Generation RAG 101vincent683379
 
Designing for Hardware Accessibility at Comcast
Designing for Hardware Accessibility at ComcastDesigning for Hardware Accessibility at Comcast
Designing for Hardware Accessibility at ComcastUXDXConf
 
Choosing the Right FDO Deployment Model for Your Application _ Geoffrey at In...
Choosing the Right FDO Deployment Model for Your Application _ Geoffrey at In...Choosing the Right FDO Deployment Model for Your Application _ Geoffrey at In...
Choosing the Right FDO Deployment Model for Your Application _ Geoffrey at In...FIDO Alliance
 
Working together SRE & Platform Engineering
Working together SRE & Platform EngineeringWorking together SRE & Platform Engineering
Working together SRE & Platform EngineeringMarcus Vechiato
 
Continuing Bonds Through AI: A Hermeneutic Reflection on Thanabots
Continuing Bonds Through AI: A Hermeneutic Reflection on ThanabotsContinuing Bonds Through AI: A Hermeneutic Reflection on Thanabots
Continuing Bonds Through AI: A Hermeneutic Reflection on ThanabotsLeah Henrickson
 
Enterprise Knowledge Graphs - Data Summit 2024
Enterprise Knowledge Graphs - Data Summit 2024Enterprise Knowledge Graphs - Data Summit 2024
Enterprise Knowledge Graphs - Data Summit 2024Enterprise Knowledge
 
Easier, Faster, and More Powerful – Notes Document Properties Reimagined
Easier, Faster, and More Powerful – Notes Document Properties ReimaginedEasier, Faster, and More Powerful – Notes Document Properties Reimagined
Easier, Faster, and More Powerful – Notes Document Properties Reimaginedpanagenda
 
The Value of Certifying Products for FDO _ Paul at FIDO Alliance.pdf
The Value of Certifying Products for FDO _ Paul at FIDO Alliance.pdfThe Value of Certifying Products for FDO _ Paul at FIDO Alliance.pdf
The Value of Certifying Products for FDO _ Paul at FIDO Alliance.pdfFIDO Alliance
 

Dernier (20)

FDO for Camera, Sensor and Networking Device – Commercial Solutions from VinC...
FDO for Camera, Sensor and Networking Device – Commercial Solutions from VinC...FDO for Camera, Sensor and Networking Device – Commercial Solutions from VinC...
FDO for Camera, Sensor and Networking Device – Commercial Solutions from VinC...
 
A Business-Centric Approach to Design System Strategy
A Business-Centric Approach to Design System StrategyA Business-Centric Approach to Design System Strategy
A Business-Centric Approach to Design System Strategy
 
Simplified FDO Manufacturing Flow with TPMs _ Liam at Infineon.pdf
Simplified FDO Manufacturing Flow with TPMs _ Liam at Infineon.pdfSimplified FDO Manufacturing Flow with TPMs _ Liam at Infineon.pdf
Simplified FDO Manufacturing Flow with TPMs _ Liam at Infineon.pdf
 
BT & Neo4j _ How Knowledge Graphs help BT deliver Digital Transformation.pptx
BT & Neo4j _ How Knowledge Graphs help BT deliver Digital Transformation.pptxBT & Neo4j _ How Knowledge Graphs help BT deliver Digital Transformation.pptx
BT & Neo4j _ How Knowledge Graphs help BT deliver Digital Transformation.pptx
 
Using IESVE for Room Loads Analysis - UK & Ireland
Using IESVE for Room Loads Analysis - UK & IrelandUsing IESVE for Room Loads Analysis - UK & Ireland
Using IESVE for Room Loads Analysis - UK & Ireland
 
Structuring Teams and Portfolios for Success
Structuring Teams and Portfolios for SuccessStructuring Teams and Portfolios for Success
Structuring Teams and Portfolios for Success
 
AI mind or machine power point presentation
AI mind or machine power point presentationAI mind or machine power point presentation
AI mind or machine power point presentation
 
What's New in Teams Calling, Meetings and Devices April 2024
What's New in Teams Calling, Meetings and Devices April 2024What's New in Teams Calling, Meetings and Devices April 2024
What's New in Teams Calling, Meetings and Devices April 2024
 
Intro in Product Management - Коротко про професію продакт менеджера
Intro in Product Management - Коротко про професію продакт менеджераIntro in Product Management - Коротко про професію продакт менеджера
Intro in Product Management - Коротко про професію продакт менеджера
 
Oauth 2.0 Introduction and Flows with MuleSoft
Oauth 2.0 Introduction and Flows with MuleSoftOauth 2.0 Introduction and Flows with MuleSoft
Oauth 2.0 Introduction and Flows with MuleSoft
 
Your enemies use GenAI too - staying ahead of fraud with Neo4j
Your enemies use GenAI too - staying ahead of fraud with Neo4jYour enemies use GenAI too - staying ahead of fraud with Neo4j
Your enemies use GenAI too - staying ahead of fraud with Neo4j
 
AI presentation and introduction - Retrieval Augmented Generation RAG 101
AI presentation and introduction - Retrieval Augmented Generation RAG 101AI presentation and introduction - Retrieval Augmented Generation RAG 101
AI presentation and introduction - Retrieval Augmented Generation RAG 101
 
Designing for Hardware Accessibility at Comcast
Designing for Hardware Accessibility at ComcastDesigning for Hardware Accessibility at Comcast
Designing for Hardware Accessibility at Comcast
 
Choosing the Right FDO Deployment Model for Your Application _ Geoffrey at In...
Choosing the Right FDO Deployment Model for Your Application _ Geoffrey at In...Choosing the Right FDO Deployment Model for Your Application _ Geoffrey at In...
Choosing the Right FDO Deployment Model for Your Application _ Geoffrey at In...
 
Overview of Hyperledger Foundation
Overview of Hyperledger FoundationOverview of Hyperledger Foundation
Overview of Hyperledger Foundation
 
Working together SRE & Platform Engineering
Working together SRE & Platform EngineeringWorking together SRE & Platform Engineering
Working together SRE & Platform Engineering
 
Continuing Bonds Through AI: A Hermeneutic Reflection on Thanabots
Continuing Bonds Through AI: A Hermeneutic Reflection on ThanabotsContinuing Bonds Through AI: A Hermeneutic Reflection on Thanabots
Continuing Bonds Through AI: A Hermeneutic Reflection on Thanabots
 
Enterprise Knowledge Graphs - Data Summit 2024
Enterprise Knowledge Graphs - Data Summit 2024Enterprise Knowledge Graphs - Data Summit 2024
Enterprise Knowledge Graphs - Data Summit 2024
 
Easier, Faster, and More Powerful – Notes Document Properties Reimagined
Easier, Faster, and More Powerful – Notes Document Properties ReimaginedEasier, Faster, and More Powerful – Notes Document Properties Reimagined
Easier, Faster, and More Powerful – Notes Document Properties Reimagined
 
The Value of Certifying Products for FDO _ Paul at FIDO Alliance.pdf
The Value of Certifying Products for FDO _ Paul at FIDO Alliance.pdfThe Value of Certifying Products for FDO _ Paul at FIDO Alliance.pdf
The Value of Certifying Products for FDO _ Paul at FIDO Alliance.pdf
 

Testing Everything for ASP.NET MVC Applications

  • 1. Testing Everything for ASP.NET MVC Applications Matt Honeycutt @matthoneycutt http://trycatchfail.com
  • 2. Not this kind of testing…
  • 3. What we’ll cover: • Required Tools • Testing an ASP.NET MVC controller 1) Unit Testing C# • Required Tools • Testing a Knockout view model • Testing jQuery and DOM manipulation 2) Unit Testing JavaScript • Intro to SpecsFor.Mvc • Implementing a new feature TDD-style 3) End-to-End Testing
  • 4. Heroic Support Support Request •E-mail •Website Tracking •See what’s waiting •Tag and categorize Response •Reply via E-mail •See conversations
  • 5. Given-When-Then Given… • a ticket exists When… • a user views the ticket Then… •It displays the ticket title •It displays the ticket body •It displays the submitter’s name Given a ticket exists, when a user views the ticket, then it displays the ticket title, it displays the ticket body, and it displays the submitter’s name.
  • 6. Unit-Testing with C# in ASP.NET MVC
  • 7. Base Class for Specs • Built on NUnit • Auto-mocking container • Supports DRY testing with Spec-style tests • Use as little or as much as you want Includes Solutions to Common Problems • Moq – Mocking framework • Should – Assertion extension methods • ExpectedObjects – Compare objects cleanly Additional Helpers • Additional assertion extension methods • Extensions simplify to Moq and ExpectedObjects
  • 8. Demo: Testing an MVC Action Given… • No state When… • Someone submits a new ticket Then… • It displays a success message • It saves the ticket • It redirects back to the dashboard When someone submits a new ticket, it displays a success message, it saves the ticket, and it redirects back to the dashboard
  • 9. Another example Given… • a ticket exists When… • a user views the ticket Then… •It displays the ticket title •It displays the ticket body •It displays the submitter’s E-mail Given a ticket exists, when a user views the ticket, it displays the ticket title, it displays the ticket body, and it displays the submitter’s E-mail.
  • 11. Given-When-Then Given… • a ticket view model When… • saving tags Then… • it saves tags to the server • it displays a success message Given a ticket view model, when saving tags, it saves tags to the server, and it displays a success message.
  • 12. Jasmine Specifications Describe… • a ticket view model Describe… • when saving tags It… • saves tags to the server • displays a success message Given a ticket view model, when saving tags, it saves tags to the server, and it displays a success message.
  • 14. ASP.NET Application Host • Built on IIS Express • Deploy and host your app when you run your tests • Includes a “stub” SMTP server Abstraction Over Selenium Web Driver • Handles browser driver management • Provides simplified API for common operations Strongly-Typed API for Browser Automation • Unit-test like syntax • Navigation and page manipulation based on lambda expressions End-to-End Tests with…
  • 15. Authentication Given… • a user exists When… • logging in with valid credentials Then… • it redirects to the dashboard Given a user exists, when logging in with valid credentials, it redirects to the dashboard.
  • 16. End-to-End Tests for ASP.NET MVC
  • 17. Replying to a Ticket Given… • there is an existing ticket When… • when replying to the ticket Then… • it sends the response to the submitter • it displays the response on the ticket Given there is an existing ticket, when replying to a ticket, then it sends the response to the submitter and displays the response on the ticket.
  • 18. Test your client-side JavaScript Test your server-side C# Test your app end-to-end
  • 19. Want More? • Last session of the day, learn about cloud-enabling this app! Come see me tomorrow! • Install SpecsFor and SpecsFor.Mvc • @matthoneycutt Ping me online: • http://trycatchfail.com Follow my blog: