Upgrade to Pro — share decks privately, control downloads, hide ads and more …

TDD: As you meant it

TDD: As you meant it

Original talk presenting NFluent, an assertion framework for .Net that aims at improving testing practices.
Deeply influenced by AssertJ

Cyrille DUPUYDAUBY

February 19, 2017
Tweet

More Decks by Cyrille DUPUYDAUBY

Other Decks in Programming

Transcript

  1. AS YOU MEANT IT… 
 NFluent: the craft you needed

    
 to boost your TDD
 Brown Bag Lunch - 2014 ! ! @tpierrain @cyrdup
  2. HARD FACT #1 CONSEQUENCES error-prone
 reluctance to write tests
 relevance

    of tests? Tests assertions are needlessly difficult to write !
  3. 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
  4. HARD FACT #3 CONSEQUENCES Need to debug the failing test

    to understand
 slowwww… TDD feedback loop
 Poor efficiency?!? When reliable… error messages are often unhelpful
  5. ! ! ! ! ! ! ! ! ! !

    ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! (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]
  6. #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!
  7. • 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
  8. • 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
  9. ! ! 
 
 
 
 
 IN THE WILD

    tpierrain malat rhwy dupdob
  10. ! ! ! ! ! 
 Does your test framework

    dictate the way you work, or is it the other way around? FINAL QUESTION
  11. (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?
  12. • 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
  13. 
 Use NFluent! ! ! ! ! WRITE VALUABLE TESTS

    (NFluent logo © rhwy) ! http://www.n-fluent.net Thank you!