nfluent brown bag lunch january 2014
DESCRIPTION
Slides of the Brown Bag Lunch session at SG CIB, dedicated to NFluent. Video also available here: https://www.youtube.com/watch?v=fJuDLWJiIJcTRANSCRIPT
![Page 1: NFluent Brown bag lunch January 2014](https://reader033.vdocuments.site/reader033/viewer/2022051611/54b77dc04a79595c198b4693/html5/thumbnails/1.jpg)
AS YOU MEANT IT…
NFluent: the craft you needed to boost your TDD
Brown Bag Lunch - 2014 !!
@tpierrain @cyrdup
![Page 2: NFluent Brown bag lunch January 2014](https://reader033.vdocuments.site/reader033/viewer/2022051611/54b77dc04a79595c198b4693/html5/thumbnails/2.jpg)
WHO ARE WE?
use case driven (blog) Many Cores (blog)
![Page 3: NFluent Brown bag lunch January 2014](https://reader033.vdocuments.site/reader033/viewer/2022051611/54b77dc04a79595c198b4693/html5/thumbnails/3.jpg)
UNIT TESTS FROM THE TRENCHES…
![Page 4: NFluent Brown bag lunch January 2014](https://reader033.vdocuments.site/reader033/viewer/2022051611/54b77dc04a79595c198b4693/html5/thumbnails/4.jpg)
COMMENTS?
![Page 5: NFluent Brown bag lunch January 2014](https://reader033.vdocuments.site/reader033/viewer/2022051611/54b77dc04a79595c198b4693/html5/thumbnails/5.jpg)
IDEAL WORLD
![Page 6: NFluent Brown bag lunch January 2014](https://reader033.vdocuments.site/reader033/viewer/2022051611/54b77dc04a79595c198b4693/html5/thumbnails/6.jpg)
HARD FACT #1 Tests assertions are needlessly difficult to write
!
![Page 7: NFluent Brown bag lunch January 2014](https://reader033.vdocuments.site/reader033/viewer/2022051611/54b77dc04a79595c198b4693/html5/thumbnails/7.jpg)
HARD FACT #1 Tests assertions are needlessly difficult to write
!
![Page 8: NFluent Brown bag lunch January 2014](https://reader033.vdocuments.site/reader033/viewer/2022051611/54b77dc04a79595c198b4693/html5/thumbnails/8.jpg)
HARD FACT #1 Tests assertions are needlessly difficult to write
!
![Page 9: NFluent Brown bag lunch January 2014](https://reader033.vdocuments.site/reader033/viewer/2022051611/54b77dc04a79595c198b4693/html5/thumbnails/9.jpg)
HARD FACT #1
CONSEQUENCES
error-prone reluctance to write tests
relevance of tests?
Tests assertions are needlessly difficult to write
!
![Page 10: NFluent Brown bag lunch January 2014](https://reader033.vdocuments.site/reader033/viewer/2022051611/54b77dc04a79595c198b4693/html5/thumbnails/10.jpg)
#1: WE DESERVE NO BRAINER ASSERTIONS!
![Page 11: NFluent Brown bag lunch January 2014](https://reader033.vdocuments.site/reader033/viewer/2022051611/54b77dc04a79595c198b4693/html5/thumbnails/11.jpg)
HARD FACT #2Test intentions may be difficult to grasp
![Page 12: NFluent Brown bag lunch January 2014](https://reader033.vdocuments.site/reader033/viewer/2022051611/54b77dc04a79595c198b4693/html5/thumbnails/12.jpg)
HARD FACT #2
CONSEQUENCES
tests are hard to maintain loss of trust in existing tests
Removal of failing tests?
Test intentions may be difficult to grasp
![Page 13: NFluent Brown bag lunch January 2014](https://reader033.vdocuments.site/reader033/viewer/2022051611/54b77dc04a79595c198b4693/html5/thumbnails/13.jpg)
#2: TESTS INTENTIONS SHOULD BE OBVIOUS!
![Page 14: NFluent Brown bag lunch January 2014](https://reader033.vdocuments.site/reader033/viewer/2022051611/54b77dc04a79595c198b4693/html5/thumbnails/14.jpg)
HARD FACT #3
When reliable… error messages are often unhelpful
![Page 15: NFluent Brown bag lunch January 2014](https://reader033.vdocuments.site/reader033/viewer/2022051611/54b77dc04a79595c198b4693/html5/thumbnails/15.jpg)
HARD FACT #3
CONSEQUENCES
Need to debug the failing test to understandslowwww… TDD feedback loop
Poor efficiency?!?
When reliable… error messages are often unhelpful
![Page 16: NFluent Brown bag lunch January 2014](https://reader033.vdocuments.site/reader033/viewer/2022051611/54b77dc04a79595c198b4693/html5/thumbnails/16.jpg)
#3:WE WANT TRUSTWORTHY & HELPFUL ERROR MESSAGES!
![Page 17: NFluent Brown bag lunch January 2014](https://reader033.vdocuments.site/reader033/viewer/2022051611/54b77dc04a79595c198b4693/html5/thumbnails/17.jpg)
#3:WE WANT TRUSTWORTHY & HELPFUL ERROR MESSAGES!
![Page 18: NFluent Brown bag lunch January 2014](https://reader033.vdocuments.site/reader033/viewer/2022051611/54b77dc04a79595c198b4693/html5/thumbnails/18.jpg)
TDD IS NOT EASY…
![Page 19: NFluent Brown bag lunch January 2014](https://reader033.vdocuments.site/reader033/viewer/2022051611/54b77dc04a79595c198b4693/html5/thumbnails/19.jpg)
TDD IS NOT EASY…
… but NFluent will greatly help you
![Page 20: NFluent Brown bag lunch January 2014](https://reader033.vdocuments.site/reader033/viewer/2022051611/54b77dc04a79595c198b4693/html5/thumbnails/20.jpg)
!! !!!!!!!!!!!!!!!!!!!!!!!
(source: http://www.thefreedictionary.com/fluent)
UBIQUITOUS LANGUAGE
Fluent [ˈfluːənt] adj
1. spoken or written with ease: fluent French. 2. able to speak or write smoothly, easily, or readily: fluent
in three languages.
3. smooth; easy; graceful: fluent motion
4. flowing or capable of flowing; fluid
![from Latin: fluere to flow, stream]
![Page 21: NFluent Brown bag lunch January 2014](https://reader033.vdocuments.site/reader033/viewer/2022051611/54b77dc04a79595c198b4693/html5/thumbnails/21.jpg)
#1: NO BRAINER ASSERTIONS!
NFLUENT’S ANSWERS
#2: OBVIOUS TESTS INTENTIONS!
#3: TRUSTWORTHY & HELPFUL ERROR MESSAGES!
![Page 22: NFluent Brown bag lunch January 2014](https://reader033.vdocuments.site/reader033/viewer/2022051611/54b77dc04a79595c198b4693/html5/thumbnails/22.jpg)
#1: NO BRAINER ASSERTIONS!
NFLUENT’S ANSWERS
A unique entry point for assertions (Check.That)
IntelliSense guided writing (a.k.a. the super-duper-happy dot xp)
#2: OBVIOUS TESTS INTENTIONS!
#3: TRUSTWORTHY & HELPFUL ERROR MESSAGES!
![Page 23: NFluent Brown bag lunch January 2014](https://reader033.vdocuments.site/reader033/viewer/2022051611/54b77dc04a79595c198b4693/html5/thumbnails/23.jpg)
#1: NO BRAINER ASSERTIONS!
NFLUENT’S ANSWERS
Natural language assertions
A unique entry point for assertions (Check.That)
IntelliSense guided writing (a.k.a. the super-duper-happy dot xp)
#2: OBVIOUS TESTS INTENTIONS!
#3: TRUSTWORTHY & HELPFUL ERROR MESSAGES!
![Page 24: NFluent Brown bag lunch January 2014](https://reader033.vdocuments.site/reader033/viewer/2022051611/54b77dc04a79595c198b4693/html5/thumbnails/24.jpg)
#1: NO BRAINER ASSERTIONS!
NFLUENT’S ANSWERS
Natural language assertions
A unique entry point for assertions (Check.That)
IntelliSense guided writing (a.k.a. the super-duper-happy dot xp)
Non ambiguous, contextualized and explicit error messages
#2: OBVIOUS TESTS INTENTIONS!
#3: TRUSTWORTHY & HELPFUL ERROR MESSAGES!
![Page 25: NFluent Brown bag lunch January 2014](https://reader033.vdocuments.site/reader033/viewer/2022051611/54b77dc04a79595c198b4693/html5/thumbnails/25.jpg)
COMBINING THOSE 3 WISHES, WE CAN REACH OUR IDEAL: EFFICIENT TDD!
![Page 26: NFluent Brown bag lunch January 2014](https://reader033.vdocuments.site/reader033/viewer/2022051611/54b77dc04a79595c198b4693/html5/thumbnails/26.jpg)
!
!
!
!
!
!!
NFLUENT SAMPLES
![Page 27: NFluent Brown bag lunch January 2014](https://reader033.vdocuments.site/reader033/viewer/2022051611/54b77dc04a79595c198b4693/html5/thumbnails/27.jpg)
DEMO
![Page 28: NFluent Brown bag lunch January 2014](https://reader033.vdocuments.site/reader033/viewer/2022051611/54b77dc04a79595c198b4693/html5/thumbnails/28.jpg)
• NFluent is
• An OSS .NET library for fluent assertions
• Independent and compliant with all major .NET test runners
• Directly inspired by the awesome Java FEST assert library
• Available on
IN A FEW WORDS
![Page 29: NFluent Brown bag lunch January 2014](https://reader033.vdocuments.site/reader033/viewer/2022051611/54b77dc04a79595c198b4693/html5/thumbnails/29.jpg)
• A fully extensible model
• No need to wait the NFluent team to add your own assertions on any kind of ‘value’
• The opportunity to use your own ubiquitous language (DSL) from within your tests
!
• Some extra candies
• Like the Properties extension method for IEnumerable
• The HasFieldsWithSameValues(anonymous class)
BONUS FEATURES
![Page 30: NFluent Brown bag lunch January 2014](https://reader033.vdocuments.site/reader033/viewer/2022051611/54b77dc04a79595c198b4693/html5/thumbnails/30.jpg)
!
!
IN THE WILD
tpierrain malatrhwydupdob
![Page 31: NFluent Brown bag lunch January 2014](https://reader033.vdocuments.site/reader033/viewer/2022051611/54b77dc04a79595c198b4693/html5/thumbnails/31.jpg)
FINAL QUESTION
![Page 32: NFluent Brown bag lunch January 2014](https://reader033.vdocuments.site/reader033/viewer/2022051611/54b77dc04a79595c198b4693/html5/thumbnails/32.jpg)
!
!
!
!
!
Does your test framework dictate the way you work,
or is it the other way around?
FINAL QUESTION
![Page 33: NFluent Brown bag lunch January 2014](https://reader033.vdocuments.site/reader033/viewer/2022051611/54b77dc04a79595c198b4693/html5/thumbnails/33.jpg)
APPLY TDD!
![Page 34: NFluent Brown bag lunch January 2014](https://reader033.vdocuments.site/reader033/viewer/2022051611/54b77dc04a79595c198b4693/html5/thumbnails/34.jpg)
APPLY TDD!
Use NFluent!
![Page 35: NFluent Brown bag lunch January 2014](https://reader033.vdocuments.site/reader033/viewer/2022051611/54b77dc04a79595c198b4693/html5/thumbnails/35.jpg)
APPLY TDD!
Use NFluent!
![Page 37: NFluent Brown bag lunch January 2014](https://reader033.vdocuments.site/reader033/viewer/2022051611/54b77dc04a79595c198b4693/html5/thumbnails/37.jpg)
![Page 38: NFluent Brown bag lunch January 2014](https://reader033.vdocuments.site/reader033/viewer/2022051611/54b77dc04a79595c198b4693/html5/thumbnails/38.jpg)
APPENDIX
![Page 39: NFluent Brown bag lunch January 2014](https://reader033.vdocuments.site/reader033/viewer/2022051611/54b77dc04a79595c198b4693/html5/thumbnails/39.jpg)
TDD: A WORKFLOW
![Page 40: NFluent Brown bag lunch January 2014](https://reader033.vdocuments.site/reader033/viewer/2022051611/54b77dc04a79595c198b4693/html5/thumbnails/40.jpg)
(like: FluentAssertion, Sharp Tests Ex, etc.)
• Their usage of lambda expression predicates hurts the fluent experience
new[] { 1, 2, 3 }.Should().Contain(item => item > 3, "at least {0} item should be larger than 3", 1);
• (Red is dead, but) Should is weak…
• We aim to be more ambitious in term of fluentness
NFLUENT VS. OTHER ASSERTION LIBRARIES?
![Page 41: NFluent Brown bag lunch January 2014](https://reader033.vdocuments.site/reader033/viewer/2022051611/54b77dc04a79595c198b4693/html5/thumbnails/41.jpg)
• For NFluent contributors
• No warning (all warn as ERROR)
• No StyleCop warning (full rules)
• 100% of test coverage - all test passed of course!
• The entire build lasts less than a minute (including all unit tests)
DEFINITION OF DONE
![Page 42: NFluent Brown bag lunch January 2014](https://reader033.vdocuments.site/reader033/viewer/2022051611/54b77dc04a79595c198b4693/html5/thumbnails/42.jpg)
!
!
!
!
!
!!
BY TEST DEVELOPMENT DRIVEN IS?
![Page 43: NFluent Brown bag lunch January 2014](https://reader033.vdocuments.site/reader033/viewer/2022051611/54b77dc04a79595c198b4693/html5/thumbnails/43.jpg)
Use NFluent!
!
!
!!
WRITE VALUABLE TESTS
(NFluent logo © rhwy)
!
http://www.n-fluent.net
Thank you!