1 / 15

Test-Driven Development: Exploring Child's Addition Through Fructose Framework

This documentation provides a comprehensive overview of how to implement test-driven development (TDD) for a "child's addition" operation using the Fructose testing framework. It features examples that illustrate how to define and run tests for adding numbers, such as ensuring that 1 + 1 equals 11. The approach emphasizes the necessity of specifying and validating behaviour through unit tests. Additionally, we explore user-defined types and their operations, reinforcing the principles of TDD and adapting tests for custom data types.

presta
Télécharger la présentation

Test-Driven Development: Exploring Child's Addition Through Fructose Framework

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 1 + 1 becomes 11 what does our software promise?

  2. child’s addition 1 + 1 => 11

  3. define the test #include <fructose/test_base.h> // test framework /** * define the tests. */ struct math_test : public fructose::test_base< math_test > { void one_plus_one_is_eleven( const std::string& test_name ) { fructose_assert( 11 == 1 + 1 ); } }; example 1 2 3 4

  4. put test into a program /** * run the tests. */ int main( int argc, char* argv[] ) { math_test t; t.add_test( "1 + 1 => 11", &math_test::one_plus_one_is_eleven ); return t.run( argc, argv ); } example 1 2 3 4

  5. run the test prompt>example1.exe Error: 1 + 1 => 11 in example1.cpp(13): 11 == 1 + 1 failed. Test driver failed: 1 error example 1 2 3 4

  6. implement child’s addition /* Note: we cannot redefine int's behaviour for addition, like: * const int operator+( int const a, int const b ); // no no no */ // child's addition const Integer operator+( Integer const a, Integer const b ) { return 11; // solution! } // equality const bool operator==( Integer const a, Integer const b ) { return a.to_int() == b.to_int(); } example 1 2 3 4

  7. Integer user defined type /** * create from int, obtain as int. */ class Integer { public: // this converting constructor allows to say: Integer a = 1; Integer( int const i ) : m_value( i ) { ; } // provide the implementation value for other operations const int to_int() const { return m_value; } private: int m_value; // the implementation }; example 1 2 3 4

  8. adapt test to use Integer void one_plus_one_is_eleven( const std::string& test_name ) { Integer one = 1; fructose_assert( 11 == one + 1 ); } example 1 2 3 4

  9. run the test return 11; // solution!  fructose_assert( 11 == one + 1 ); prompt>example2.exe prompt> example 1 2 3 4

  10. oh, you also want 12 == 1 + 2 ?! /** * add another test. */ struct math_test : public fructose::test_base< math_test > { void one_plus_one_is_eleven( const std::string& test_name ) ... void one_plus_two_is_twelve( const std::string& test_name ) { Integer two = 2; fructose_assert( 12 == 1 + two ); } }; t.add_test( "1 + 2 => 12", &math_test::one_plus_two_is_twelve ); example 1 2 3 4

  11. run the test return 11; // solution? fructose_assert( 12 == 1 + two ); prompt>example3.exe Error: 1 + 2 => 12 in example3.cpp(49): 12 == 1 + two failed. Test driver failed: 1 error prompt> example 1 2 3 4

  12. correct verb child’s addition // child's addition const Integer operator+( Integer const a, Integer const b ) { return 10 * a.to_int() + b.to_int(); } example 1 2 3 4

  13. run the test return 10 * a.to_int() + b.to_int();  prompt>example4.exe prompt> 11 == one + 1; 12 == 1 + two; example 1 2 3 4

  14. what did we learn? • decide on behaviour • specify, document behaviour: the tests • ensure the specified behaviour is present • ensure the specified behaviour stays present its name: • Test Driven Development (TDD)

  15. further information on WikiPedia • agile manifesto • extreme programming • test-driven development • unit test, list of unit testing frameworks • Matlab unit testing: http://mlunit.dohmke.de/

More Related