Behavior Driven
Development

B.D.D.
WHO AM I?
• Luis Majano - Computer Engineer	

• Hail from El Salvador ------------------>	

• Architecture + Software Desi...
AGENDA
• Testing Landscape	

• WhyTest	

• TDD Intro	

• BDD Intro	

• TestBox BDD
Testing
Landscape
Why Where to start?	

What to test?	

What not to test?
Cost To Fix Time detected
Requirements Design Building Testing Post-Release
Time
Introduced
Requirements 1x 3x 5-10x 10x 1...
BIGGEST LIE IN SOFTWARE DEV
We don’t have time!
Don’t worry, we will
create the tests and
refactor it later!
What isT.D.D
Test-driven development (TDD) is a software
development process that relies on the repetition of a
very short...
T.D.D. Process
Write Test
Mock
Write CodeVerify
Refactor
T.D.D.
CFC
Validate()
Add()
List()
Save()
Test%
CFC%
testValidate()%
testAdd()%
testList()%
testSave()%
T.D.D.
• It is an approach to develop software by writing code that exercises your code	

• It does help you:	

• Verifies ...
T.D.D.
• Is NOT about verifying software requirements	

• Does not:	

• Verify user’s or stakeholder expectations	

• Expr...
What is B.D.D.?
In software engineering, behavior-driven development
(BDD) is a software development process based on
test...
B.D.D isT.D.D. Evolved
• Dan North - http://dannorth.net/introducing-bdd/	

• Ubiquitous language	

• existing or being ev...
B.D.D. Process
Stories
Scenario
Specs
Implement
Behavior
Verify
Refactor
Make it work!
Then make it beautiful!
Questions Answered
Where%to%
start?%
Outside%/
>%In%
What%to%
test?%
User%
Stories%
What%Not%
to%test?%
Anything%
Else%
Story Framework
Story Scenario Spec
Stories to Scenarios
As an application user
I want to be welcomed with my name at login
in order to personalize my experie...
Stories to Scenarios
Story to Scenario to
TestBox
As an application user
I want to be welcomed with my name at login
in order to personalize my...
TestBox is a next generation testing framework for ColdFusion that is based
on BDD (Behavior Driven Development) for provi...
• BDD & xUnit style testing	

• Life-Cycle methods	

• MockBox Integration	

• AsynchronousTesting
• ANT/Jenkins Integrati...
INSTALLATION + REQUIREMENTS
• ColdFusion 9.01+, Railo 3.1+	

• xUnit + MXUnit Compatibility	

• ColdFusion 10+, Railo 4+	
...
MXUNIT COMPATIBLE
• Compatible with xUnit style by MXUnit	

• Migrate existing tests toTestBox	

• No BDD	

• How do you m...
What you get! API Docs
Samples
Core
Test Browser
Test Harness
Test Runner
Test Harness
Automated test
results!
xUnit/BDDTest
Bundles
Harness bootstrap
HTML Runner
ANT Runner
TEST BUNDLE CFC
• No matter what style, you start with a test bundle CFC	

• Inherits from testbox.system.BaseSpec or not!...
RUNNINGYOUR BUNDLES
• Execute bundle (if using inheritance) via the URL	

• http://mysite/test/bundle.cfc?method=runRemote...
REPORTERS
• ANTJunit :A specific variant of JUnit XML that works with the ANT junitreport task	

• Codexwiki : Produces Med...
TEST BUNDLE CFC
• run()
• Declare your scenario specs + suites	

• Life-cycle methods	

• Inherit some assertion, utility ...
SUITES: DESCRIBE()YOURTESTS
• Suites begin with a describe() block	

• title	

• closure	

• A suite is composed of specs ...
DESCRIBE() ARGUMENTS
Annotation Description
Title The title of the suite to register
Body The closure that represents the ...
SPECS: IT()
• At least 2 args	

• Title
• Closure
• Labels	

• Skip	

• Closure is where you define	

• Scenarios	

• 1+ ex...
EXPECTATIONS + MATCHERS
• Self-concatenated method calls that evaluate your SUT	

• Start with a call to expect( actual )
...
NESTED SUITES
• Nest to your heart’s delight	

• Life-cycle methods bubble up	

• Great for grouping and recursive scenari...
EXPECTING EXCEPTIONS
• Verifies exceptions	

• Pass a closure to expect() and use toThrow( type, regex )	

• Match types an...
LABELS + SKIPPING
• Apply labels to suites and specs	

• Skip suites and specs	

• Shortcut methods: xDescribe(), xIt()
ASYNCHRONICITY
• TestBox executes all specs in parallel	

• Decided on a per describe() block	

• Attention to var-scoping...
What the future holds!
• CommandBox Integration	

• Grunt JSTasks	

• NodeJS Runners and Watchers	

• More Sublime Integra...
Thanks!
Q & A
Upcoming SlideShare
Loading in …5
×

Test box bdd

854 views
770 views

Published on

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

  • Be the first to like this

No Downloads
Views
Total views
854
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
37
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Test box bdd

  1. 1. Behavior Driven Development
 B.D.D.
  2. 2. WHO AM I? • Luis Majano - Computer Engineer • Hail from El Salvador ------------------> • Architecture + Software Design • CEO of Ortus Solutions • Adobe Community Professional • Creator of all things Box: 
 ColdBox, ContentBox, CommandBox,WireBox….
  3. 3. AGENDA • Testing Landscape • WhyTest • TDD Intro • BDD Intro • TestBox BDD
  4. 4. Testing Landscape Why Where to start? What to test? What not to test?
  5. 5. Cost To Fix Time detected Requirements Design Building Testing Post-Release Time Introduced Requirements 1x 3x 5-10x 10x 10-100x Design --- 1x 10x 15x 25-100x Building -- -- 1x 10x 10-25x ^ Kaner, Cem; James Bach, Bret Pettichord (2001). Lessons Learned in Software Testing: A Context-Driven Approach. Wiley. p. 4. ISBN 0-471-08112-4. BUGS COST MONEY
  6. 6. BIGGEST LIE IN SOFTWARE DEV We don’t have time! Don’t worry, we will create the tests and refactor it later!
  7. 7. What isT.D.D Test-driven development (TDD) is a software development process that relies on the repetition of a very short development cycle: first the developer writes an (initially failing) automated test case that defines a desired improvement or new function, then produces the minimum amount of code to pass that test, and finally refactors the new code to acceptable standards
  8. 8. T.D.D. Process Write Test Mock Write CodeVerify Refactor
  9. 9. T.D.D. CFC Validate() Add() List() Save() Test% CFC% testValidate()% testAdd()% testList()% testSave()%
  10. 10. T.D.D. • It is an approach to develop software by writing code that exercises your code • It does help you: • Verifies your source code compiles and executes • Have immediate feedback • Create tests before rather than after (yea right!) • Express some behavior and ideas
  11. 11. T.D.D. • Is NOT about verifying software requirements • Does not: • Verify user’s or stakeholder expectations • Express that requirements are satisfied • Very very developer oriented • Tedious • TDD can be a pain in the buttocks! • We start strong, but we finish weak, even if we finish Developer Test Paralysis
  12. 12. What is B.D.D.? In software engineering, behavior-driven development (BDD) is a software development process based on test-driven development (TDD). Behavior-driven development combines the general techniques and principles of TDD with ideas from domain-driven design and object-oriented analysis and design to provide software developers and business analysts with shared tools and a shared process to collaborate on software development, with the aim of delivering "software that matters"
  13. 13. B.D.D isT.D.D. Evolved • Dan North - http://dannorth.net/introducing-bdd/ • Ubiquitous language • existing or being everywhere at the same time :  constantly • Promotes communication & collaboration between • Developers + business analysts + stakeholders • Focuses on stories or requirements rather than on functions • Focuses on what a system should do and not on how it should be implemented • Better readability and visibility • Verify that software works but also that it meets customer expectations
  14. 14. B.D.D. Process Stories Scenario Specs Implement Behavior Verify Refactor
  15. 15. Make it work! Then make it beautiful!
  16. 16. Questions Answered Where%to% start?% Outside%/ >%In% What%to% test?% User% Stories% What%Not% to%test?% Anything% Else%
  17. 17. Story Framework Story Scenario Spec
  18. 18. Stories to Scenarios As an application user I want to be welcomed with my name at login in order to personalize my experience Scenario: user login with valid credentials Given a user “luis" with password "secret" exists When I login as “luis" with "secret" Then I should see the message "Welcome back luis!"
  19. 19. Stories to Scenarios
  20. 20. Story to Scenario to TestBox As an application user I want to be welcomed with my name at login in order to personalize my experience Scenario: user login with valid credentials Given a user “luis" with password "secret" exists When I login as “luis" with "secret" Then I should see the message "Welcome back luis!" describe( “User login with valid credentials”, function(){ it( “should see a personalized message”, function(){ userService.login( “luis”, “secret” ) var event = execute(“user.home”) expect( event.getValue( “welcome” ) ).toBe( “Welcome back luis!” ) }) })
  21. 21. TestBox is a next generation testing framework for ColdFusion that is based on BDD (Behavior Driven Development) for providing a clean obvious syntax for writing tests. It contains not only a testing framework, runner, assertions and expectations library but also integrates with MockBox for mocking and stubbing. It also supports xUnit style of testing and MXUnit compatibilities.
  22. 22. • BDD & xUnit style testing • Life-Cycle methods • MockBox Integration • AsynchronousTesting • ANT/Jenkins Integration • Custom Reporters & Runners • Dynamic Labels & Skipping • Debug Output Streams
  23. 23. INSTALLATION + REQUIREMENTS • ColdFusion 9.01+, Railo 3.1+ • xUnit + MXUnit Compatibility • ColdFusion 10+, Railo 4+ • xUnit, MXUnit, BDD • Place anywhere you like, create a “/testbox” mapping
 
 
 • Sublime Package, CPU IDE Support
  24. 24. MXUNIT COMPATIBLE • Compatible with xUnit style by MXUnit • Migrate existing tests toTestBox • No BDD • How do you migrate?
 
 
 
 • If something is not working, report it: bugs@coldbox.org
  25. 25. What you get! API Docs Samples Core Test Browser Test Harness Test Runner
  26. 26. Test Harness Automated test results! xUnit/BDDTest Bundles Harness bootstrap HTML Runner ANT Runner
  27. 27. TEST BUNDLE CFC • No matter what style, you start with a test bundle CFC • Inherits from testbox.system.BaseSpec or not!
 
 
 • URL runner caveat • Get’s lots of methods and properties for testing • TesBox will then execute all tests within 1 or more bundles
  28. 28. RUNNINGYOUR BUNDLES • Execute bundle (if using inheritance) via the URL • http://mysite/test/bundle.cfc?method=runRemote • Using theTestBox Class: testbox.system.TestBox • Bundle(s) Runner • Directory Runner • SOAP Runner • HTTP/REST Runner • ANT Runner • Custom Runners • What’s the output? We call this reporters
  29. 29. REPORTERS • ANTJunit :A specific variant of JUnit XML that works with the ANT junitreport task • Codexwiki : Produces MediaWiki syntax for usage in Codex Wiki • Console : Sends report to console • Doc : Builds semantic HTML to produce nice documentation • Dot : Builds an awesome dot report • JSON : Builds a report into JSON • JUnit : Builds a JUnit compliant report • Raw : Returns the raw structure representation of the testing results • Simple :A basic HTML reporter • Text : Back to the 80's with an awesome text report • XML : Builds yet another XML testing report • Tap :A test anything protocol reporter • Min :A minimalistic view of your test reports • Custom:Anything you like
  30. 30. TEST BUNDLE CFC • run() • Declare your scenario specs + suites • Life-cycle methods • Inherit some assertion, utility and mocking methods • Expectations Library: expect() • Assertions Library: $assert
  31. 31. SUITES: DESCRIBE()YOURTESTS • Suites begin with a describe() block • title • closure • A suite is composed of specs or more suites • Closures can contain • Life-cycle methods • More suites • Specs
  32. 32. DESCRIBE() ARGUMENTS Annotation Description Title The title of the suite to register Body The closure that represents the test suite Labels The list or array of labels this suite group belongs to Skip A flag or a closure that tells TestBox to skip this suite group from testing if true. If this is a closure it must return boolean. AsyncAll If you want to parallelize the execution of the defined specs in this suite group.
  33. 33. SPECS: IT() • At least 2 args • Title • Closure • Labels • Skip • Closure is where you define • Scenarios • 1+ expectations, assertions • Specs tested in order declared
  34. 34. EXPECTATIONS + MATCHERS • Self-concatenated method calls that evaluate your SUT • Start with a call to expect( actual ) • Concatenated with matcher methods • TestBox ships with a plethora of matchers! • Matchers also have negation (not) counterparts
  35. 35. NESTED SUITES • Nest to your heart’s delight • Life-cycle methods bubble up • Great for grouping and recursive scenarios • Execute in descending order
  36. 36. EXPECTING EXCEPTIONS • Verifies exceptions • Pass a closure to expect() and use toThrow( type, regex ) • Match types and message+detail regex
  37. 37. LABELS + SKIPPING • Apply labels to suites and specs • Skip suites and specs • Shortcut methods: xDescribe(), xIt()
  38. 38. ASYNCHRONICITY • TestBox executes all specs in parallel • Decided on a per describe() block • Attention to var-scoping • Test shared access and contention • Much power comes much responsibility!
  39. 39. What the future holds! • CommandBox Integration • Grunt JSTasks • NodeJS Runners and Watchers • More Sublime Integration • More focus on automation • Gherkins support
  40. 40. Thanks! Q & A

×