SlideShare a Scribd company logo
BDD with Boost Test
describe "a stack" do
  let(:stack) { [] }

  context "when initialised" do
    it "should be empty" do
      stack.should be_empty
    end
  end

  describe "pop" do
    context "on an empty stack" do
      before(:each) {
        stack.should be_empty
      }

      it "should have no effect" do
        stack.pop
        stack.should be_empty
                                    context "on a stack with a single member" do
      end
                                      before(:each) {
    end
                                        stack.push(1)
                                        stack.size.should be(1)
                                      }

                                        it "should result in an empty stack" do
                                          stack.pop
                                          stack.should be_empty
                                        end

                                        it "should reduce the stack size by one" do
                                          expect { stack.pop }.to change { stack.size }.by(-1)
                                        end
                                      end
                                    end
                                  end
a stack
  when initialised
    should be empty
  pop
    on an empty stack
      should have no effect
    on a stack with a single member
      should result in an empty stack
      should reduce the stack size by one
describe "a stack" do
  let(:stack) { [] }

  describe "pop" do
    context "on a stack with a single member" do
      before(:each) {
        stack.push(1)
        stack.size.should be(1)
      }

      it "should reduce the stack size by one" do
        expect {
          stack.pop
        }.to change { stack.size }.by(-1)
      end
    end
  end
end
struct a_stack_ {
   Stack<int> stack;
};

BOOST_FIXTURE_TEST_SUITE(a_stack, a_stack_)
  BOOST_AUTO_TEST_SUITE(pop)

    struct on_a_stack_with_a_single_member_: a_stack_ {
       on_a_stack_with_a_single_member_() {
         stack.push(1);
         BOOST_REQUIRE_EQUAL(stack.size(), 1);
       }
    };

    BOOST_FIXTURE_TEST_SUITE(on_a_stack_with_a_single_member,
                              on_a_stack_with_a_single_member_)
      BOOST_AUTO_TEST_CASE(should_reduce_the_stack_size_by_one)
      {
        std::size_t orig_size = stack.size();
        stack.pop();
        BOOST_CHECK_EQUAL(stack.size(), orig_size - 1);
      }
    BOOST_AUTO_TEST_SUITE_END()
  BOOST_AUTO_TEST_SUITE_END()
BOOST_AUTO_TEST_SUITE_END()
Entering test suite "a_stack"
Entering test suite "pop"
Entering test suite "on_a_stack_with_a_single_member"
Entering test case "should_reduce_the_stack_size_by_one"
Leaving test case "should_reduce_the_stack_size_by_one"
Leaving test suite "on_a_stack_with_a_single_member"
Leaving test suite "pop"
Leaving test suite "a_stack"
class SpecLogFormatter:
  public boost::unit_test::output::compiler_log_formatter {

public:
  SpecLogFormatter(): m_indent(0) {}

private:
  void test_unit_start(std::ostream &os,
    boost::unit_test::test_unit const& tu)
  {
    os << std::string(m_indent, ' ') <<
      boost::replace_all_copy(tu.p_name.get(), "_", " ") << std::endl;
    m_indent += 2;
  }

     void test_unit_finish(std::ostream &os,
       boost::unit_test::test_unit const& tu, unsigned long elapsed)
     {
       m_indent -= 2;
     }

     int m_indent;
};
a stack
  pop
    on a stack with a single member
      should reduce the stack size by one
a stack
  when initialised
    should be empty
  pop
    on an empty stack
      should have no effect
    on a stack with a single member
      should result in an empty stack
      should reduce the stack size by one
struct a_stack_ {
   Stack<int> stack;
};

BOOST_FIXTURE_TEST_SUITE(a_stack, a_stack_)
  BOOST_AUTO_TEST_SUITE(when_initialised)
    BOOST_AUTO_TEST_CASE(should_be_empty)
    {
      BOOST_CHECK(stack.empty());
    }
  BOOST_AUTO_TEST_SUITE_END()

  BOOST_AUTO_TEST_SUITE(pop)

    struct on_an_empty_stack_: a_stack_ {
       on_an_empty_stack_() {
         BOOST_REQUIRE(stack.empty());
       }
    };

    BOOST_FIXTURE_TEST_SUITE(on_an_empty_stack, on_an_empty_stack_)
      BOOST_AUTO_TEST_CASE(should_have_no_effect)
      {
        stack.pop();
        BOOST_CHECK(stack.empty());
      }
    BOOST_AUTO_TEST_SUITE_END()

    struct on_a_stack_with_a_single_member_: a_stack_ {
       on_a_stack_with_a_single_member_() {
         stack.push(1);
         BOOST_REQUIRE_EQUAL(stack.size(), 1);
       }
    };
BOOST_FIXTURE_TEST_SUITE(on_a_stack_with_a_single_member,
                             on_a_stack_with_a_single_member_)
      BOOST_AUTO_TEST_CASE(should_result_in_an_empty_stack)
      {
        stack.pop();
        BOOST_CHECK(stack.empty());
      }

      BOOST_AUTO_TEST_CASE(should_reduce_the_stack_size_by_one)
      {
        std::size_t orig_size = stack.size();
        stack.pop();
        BOOST_CHECK_EQUAL(stack.size(), orig_size - 1);
      }
    BOOST_AUTO_TEST_SUITE_END()
  BOOST_AUTO_TEST_SUITE_END()
BOOST_AUTO_TEST_SUITE_END()
macros

More Related Content

Similar to BDD with Boost Test

Given an expression string exp, write a java class ExpressionCheccke.pdf
Given an expression string exp, write a java class ExpressionCheccke.pdfGiven an expression string exp, write a java class ExpressionCheccke.pdf
Given an expression string exp, write a java class ExpressionCheccke.pdf
info382133
 
Stacks and queue
Stacks and queueStacks and queue
Stacks and queue
Amit Vats
 
New folderjsjfArrayStack.classpackage jsjf;publicsynchronize.docx
New folderjsjfArrayStack.classpackage jsjf;publicsynchronize.docxNew folderjsjfArrayStack.classpackage jsjf;publicsynchronize.docx
New folderjsjfArrayStack.classpackage jsjf;publicsynchronize.docx
curwenmichaela
 
lecture10trsgfchjvxgfzfdchgdchgcgshyjh.ppt
lecture10trsgfchjvxgfzfdchgdchgcgshyjh.pptlecture10trsgfchjvxgfzfdchgdchgcgshyjh.ppt
lecture10trsgfchjvxgfzfdchgdchgcgshyjh.ppt
partho5958
 
Implement the ADT stack by using an array stack to contain its entri.pdf
Implement the ADT stack by using an array stack to contain its entri.pdfImplement the ADT stack by using an array stack to contain its entri.pdf
Implement the ADT stack by using an array stack to contain its entri.pdf
SIGMATAX1
 

Similar to BDD with Boost Test (20)

Please review my code (java)Someone helped me with it but i cannot.pdf
Please review my code (java)Someone helped me with it but i cannot.pdfPlease review my code (java)Someone helped me with it but i cannot.pdf
Please review my code (java)Someone helped me with it but i cannot.pdf
 
Given an expression string exp, write a java class ExpressionCheccke.pdf
Given an expression string exp, write a java class ExpressionCheccke.pdfGiven an expression string exp, write a java class ExpressionCheccke.pdf
Given an expression string exp, write a java class ExpressionCheccke.pdf
 
Stack queue
Stack queueStack queue
Stack queue
 
Stack queue
Stack queueStack queue
Stack queue
 
Stack queue
Stack queueStack queue
Stack queue
 
Stack queue
Stack queueStack queue
Stack queue
 
Stack queue
Stack queueStack queue
Stack queue
 
Stack queue
Stack queueStack queue
Stack queue
 
Stack queue
Stack queueStack queue
Stack queue
 
Data Structure Lecture 2
Data Structure Lecture 2Data Structure Lecture 2
Data Structure Lecture 2
 
Stacks and queue
Stacks and queueStacks and queue
Stacks and queue
 
New folderjsjfArrayStack.classpackage jsjf;publicsynchronize.docx
New folderjsjfArrayStack.classpackage jsjf;publicsynchronize.docxNew folderjsjfArrayStack.classpackage jsjf;publicsynchronize.docx
New folderjsjfArrayStack.classpackage jsjf;publicsynchronize.docx
 
lecture10trsgfchjvxgfzfdchgdchgcgshyjh.ppt
lecture10trsgfchjvxgfzfdchgdchgcgshyjh.pptlecture10trsgfchjvxgfzfdchgdchgcgshyjh.ppt
lecture10trsgfchjvxgfzfdchgdchgcgshyjh.ppt
 
Data Structures and Agorithm: DS 06 Stack.pptx
Data Structures and Agorithm: DS 06 Stack.pptxData Structures and Agorithm: DS 06 Stack.pptx
Data Structures and Agorithm: DS 06 Stack.pptx
 
Implement the ADT stack by using an array stack to contain its entri.pdf
Implement the ADT stack by using an array stack to contain its entri.pdfImplement the ADT stack by using an array stack to contain its entri.pdf
Implement the ADT stack by using an array stack to contain its entri.pdf
 
Start Writing Groovy
Start Writing GroovyStart Writing Groovy
Start Writing Groovy
 
Stack
StackStack
Stack
 
Stacks
StacksStacks
Stacks
 
04 stacks
04 stacks04 stacks
04 stacks
 
Stacks
StacksStacks
Stacks
 

Recently uploaded

Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo DiehlFuture Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
Peter Udo Diehl
 

Recently uploaded (20)

Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........
 
UiPath Test Automation using UiPath Test Suite series, part 1
UiPath Test Automation using UiPath Test Suite series, part 1UiPath Test Automation using UiPath Test Suite series, part 1
UiPath Test Automation using UiPath Test Suite series, part 1
 
UiPath Test Automation using UiPath Test Suite series, part 2
UiPath Test Automation using UiPath Test Suite series, part 2UiPath Test Automation using UiPath Test Suite series, part 2
UiPath Test Automation using UiPath Test Suite series, part 2
 
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
 
WSO2CONMay2024OpenSourceConferenceDebrief.pptx
WSO2CONMay2024OpenSourceConferenceDebrief.pptxWSO2CONMay2024OpenSourceConferenceDebrief.pptx
WSO2CONMay2024OpenSourceConferenceDebrief.pptx
 
What's New in Teams Calling, Meetings and Devices April 2024
What's New in Teams Calling, Meetings and Devices April 2024What's New in Teams Calling, Meetings and Devices April 2024
What's New in Teams Calling, Meetings and Devices April 2024
 
Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...
 
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
 
Knowledge engineering: from people to machines and back
Knowledge engineering: from people to machines and backKnowledge engineering: from people to machines and back
Knowledge engineering: from people to machines and back
 
JMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and GrafanaJMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and Grafana
 
Exploring UiPath Orchestrator API: updates and limits in 2024 🚀
Exploring UiPath Orchestrator API: updates and limits in 2024 🚀Exploring UiPath Orchestrator API: updates and limits in 2024 🚀
Exploring UiPath Orchestrator API: updates and limits in 2024 🚀
 
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo DiehlFuture Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
 
The architecture of Generative AI for enterprises.pdf
The architecture of Generative AI for enterprises.pdfThe architecture of Generative AI for enterprises.pdf
The architecture of Generative AI for enterprises.pdf
 
Salesforce Adoption – Metrics, Methods, and Motivation, Antone Kom
Salesforce Adoption – Metrics, Methods, and Motivation, Antone KomSalesforce Adoption – Metrics, Methods, and Motivation, Antone Kom
Salesforce Adoption – Metrics, Methods, and Motivation, Antone Kom
 
Demystifying gRPC in .Net by John Staveley
Demystifying gRPC in .Net by John StaveleyDemystifying gRPC in .Net by John Staveley
Demystifying gRPC in .Net by John Staveley
 
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
 
How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...
 
IoT Analytics Company Presentation May 2024
IoT Analytics Company Presentation May 2024IoT Analytics Company Presentation May 2024
IoT Analytics Company Presentation May 2024
 
Agentic RAG What it is its types applications and implementation.pdf
Agentic RAG What it is its types applications and implementation.pdfAgentic RAG What it is its types applications and implementation.pdf
Agentic RAG What it is its types applications and implementation.pdf
 
"Impact of front-end architecture on development cost", Viktor Turskyi
"Impact of front-end architecture on development cost", Viktor Turskyi"Impact of front-end architecture on development cost", Viktor Turskyi
"Impact of front-end architecture on development cost", Viktor Turskyi
 

BDD with Boost Test

  • 2. describe "a stack" do let(:stack) { [] } context "when initialised" do it "should be empty" do stack.should be_empty end end describe "pop" do context "on an empty stack" do before(:each) { stack.should be_empty } it "should have no effect" do stack.pop stack.should be_empty context "on a stack with a single member" do end before(:each) { end stack.push(1) stack.size.should be(1) } it "should result in an empty stack" do stack.pop stack.should be_empty end it "should reduce the stack size by one" do expect { stack.pop }.to change { stack.size }.by(-1) end end end end
  • 3. a stack when initialised should be empty pop on an empty stack should have no effect on a stack with a single member should result in an empty stack should reduce the stack size by one
  • 4. describe "a stack" do let(:stack) { [] } describe "pop" do context "on a stack with a single member" do before(:each) { stack.push(1) stack.size.should be(1) } it "should reduce the stack size by one" do expect { stack.pop }.to change { stack.size }.by(-1) end end end end
  • 5. struct a_stack_ { Stack<int> stack; }; BOOST_FIXTURE_TEST_SUITE(a_stack, a_stack_) BOOST_AUTO_TEST_SUITE(pop) struct on_a_stack_with_a_single_member_: a_stack_ { on_a_stack_with_a_single_member_() { stack.push(1); BOOST_REQUIRE_EQUAL(stack.size(), 1); } }; BOOST_FIXTURE_TEST_SUITE(on_a_stack_with_a_single_member, on_a_stack_with_a_single_member_) BOOST_AUTO_TEST_CASE(should_reduce_the_stack_size_by_one) { std::size_t orig_size = stack.size(); stack.pop(); BOOST_CHECK_EQUAL(stack.size(), orig_size - 1); } BOOST_AUTO_TEST_SUITE_END() BOOST_AUTO_TEST_SUITE_END() BOOST_AUTO_TEST_SUITE_END()
  • 6. Entering test suite "a_stack" Entering test suite "pop" Entering test suite "on_a_stack_with_a_single_member" Entering test case "should_reduce_the_stack_size_by_one" Leaving test case "should_reduce_the_stack_size_by_one" Leaving test suite "on_a_stack_with_a_single_member" Leaving test suite "pop" Leaving test suite "a_stack"
  • 7. class SpecLogFormatter: public boost::unit_test::output::compiler_log_formatter { public: SpecLogFormatter(): m_indent(0) {} private: void test_unit_start(std::ostream &os, boost::unit_test::test_unit const& tu) { os << std::string(m_indent, ' ') << boost::replace_all_copy(tu.p_name.get(), "_", " ") << std::endl; m_indent += 2; } void test_unit_finish(std::ostream &os, boost::unit_test::test_unit const& tu, unsigned long elapsed) { m_indent -= 2; } int m_indent; };
  • 8. a stack pop on a stack with a single member should reduce the stack size by one
  • 9. a stack when initialised should be empty pop on an empty stack should have no effect on a stack with a single member should result in an empty stack should reduce the stack size by one
  • 10. struct a_stack_ { Stack<int> stack; }; BOOST_FIXTURE_TEST_SUITE(a_stack, a_stack_) BOOST_AUTO_TEST_SUITE(when_initialised) BOOST_AUTO_TEST_CASE(should_be_empty) { BOOST_CHECK(stack.empty()); } BOOST_AUTO_TEST_SUITE_END() BOOST_AUTO_TEST_SUITE(pop) struct on_an_empty_stack_: a_stack_ { on_an_empty_stack_() { BOOST_REQUIRE(stack.empty()); } }; BOOST_FIXTURE_TEST_SUITE(on_an_empty_stack, on_an_empty_stack_) BOOST_AUTO_TEST_CASE(should_have_no_effect) { stack.pop(); BOOST_CHECK(stack.empty()); } BOOST_AUTO_TEST_SUITE_END() struct on_a_stack_with_a_single_member_: a_stack_ { on_a_stack_with_a_single_member_() { stack.push(1); BOOST_REQUIRE_EQUAL(stack.size(), 1); } };
  • 11. BOOST_FIXTURE_TEST_SUITE(on_a_stack_with_a_single_member, on_a_stack_with_a_single_member_) BOOST_AUTO_TEST_CASE(should_result_in_an_empty_stack) { stack.pop(); BOOST_CHECK(stack.empty()); } BOOST_AUTO_TEST_CASE(should_reduce_the_stack_size_by_one) { std::size_t orig_size = stack.size(); stack.pop(); BOOST_CHECK_EQUAL(stack.size(), orig_size - 1); } BOOST_AUTO_TEST_SUITE_END() BOOST_AUTO_TEST_SUITE_END() BOOST_AUTO_TEST_SUITE_END()