SlideShare uma empresa Scribd logo
1 de 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:

Mais conteúdo relacionado

Semelhante a 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
 
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
 
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.
 
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
 

Semelhante a 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
 
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...
 
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...
 
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
 

Último

WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfRankYa
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .Alan Dix
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piececharlottematthew16
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningLars Bell
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 

Último (20)

WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdf
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piece
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine Tuning
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.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: