Quick Doctor In Kuwait +2773`7758`557 Kuwait Doha Qatar Dubai Abu Dhabi Sharj...
Behaviour Driven Development V 0.1
1. Behaviour Driven Development With NBehave Linking User Stories and Domain Driven Design to Testing David Ross W: www.pebblesteps.com E: willmation@gmail.com
6. Behavior Driven Development BDD is not: a testing framework or style of testing a method for writing tests BDD is: A formalised template for User Stories Able to create testable User Stories since they are defined in a formal manner Promotes “security” to a first call citizen in the analysis process
8. Allow Portfolio Manager to decide the percentage split between Cash, Property and Stock within the Portfolio Inform the Trader when the Portfolio needs to be rebalanced (ie split in the pie has changed significantly) Allow Operations to standardise Portfolio names Simple Trading application Requirements
9.
10.
11. Test First DevelopmentHow easy is it to use TFD for the following Requirement/Story Value = Units * Market Price Increase the performance of the User Security module by automatically caching the user’s manager Id The system must email the Portfolio manager when the Portfolio needs to be rebalanced Build a web site so that customers can see the performance of the portfolio
12. Test First DevelopmentDo you feel guilty?? Do you write a Failing unit test before every piece of code? Do you write a line of Unit Test code for EVERY line of production code?
13. Behavior Driven How do you write a test when you don’t know where you are going? Maybe we need requirements that are easy to write tests for?
14. RequirementsWhat are they Describes what a system should do but not how it will be done Contract between the implementation team and the analysis team Audience is typically the stake holders and not the development team
18. BDD User StoriesFormal template for User Stories Story Template As a [User/Role]I want [Behaviour]so that [I receive benefit] Example As a “Operations staff member”I want “To create a Portfolio”so that“So that it can be traded”
19. BDD User StoriesFormal template for User Stories Scenario Template Given some initial context (the givens),When an event occurs,then ensure some outcomes. Example Given “New portfolio is called Balanced Fund”When “Portfolio already exists”then “Portfolio can no be created”
20. .NET Library for writing automated BDD style tests Fluent syntax for building up a BDD Style User Stories Test runner that executes the stories and generates a report listing the contents of the stories NBehave What is it?
21. Creating a BDD Theme Collection of related stories [Theme("Portfolio Maintenance")] public class PortfolioMaintenanceStory { [Story] public void portfolio_create_story () { ... } [Story] public void portfolio_delete_story() { ... } } Reference:NBehave.Narrator.Framework.dll
22. Creating a Story Fluent interface to define the story var story = new Story("Create portfolio"); story.AsA(“Operations team member") .IWant("To create a new portfolio on behalf of a portfolio manager") .SoThat("the portfolio manager can configure the portfolio and the front office can trade");
23. Creating a Scenario Fluent interface to define the story story.WithScenario("portfolio does not exist") .Given("portfolio name is $name", "Aggressive Fund") .When("portfolio does not exist in the database") .Then("new portfolio should be created"); story.WithScenario("portfolio already exists") .Given("portfolio name is $name", "Aggressive Fund") .When("portfolio already exists in database") .Then("an error should occur");
24. Executing the test WithNBehave runner or mbUnit Ouch we get an error??? The scenario throws an exception – NBehave isn’t validating any code Use Pending story.WithScenario("portfolio does not exist") .Pending("In progress") .Given("portfolio name is $name", "Aggressive Fund") .When("portfolio does not exist in the database") .Then("new portfolio should be created");
25. Behavior Driven Development Across the Project (Story) Life Cycle Story Pending Scenario Stubbed Behavior Cycle (Red, Green, Refactor) Real Behavior Cycle (Red, Green, Refactor) Acceptance Test
26. Stubbing out the behavior WithNBehave and Rhino.Mocks Steps to generate an API Go through the User story and find all the domain objects Create a class for each domain object but don’t add state Go through the User story and create a find all the services that are required (Repositories etc) Create an interface for each service but don’t add any methods
27. Steps to generate the API continued... Slowly implement the story Add domain object properties as required Add methods signatures as required Use Stubs to explore Inputs/Outputsto the methods Stubbing out the behavior WithNBehave and Mocking
28. Stubbing example Create a new portfolio story stringportfolioName = ""; Portfoliop = null; varportfolioRepository = MockRepository.GenerateStub<IPortfolioRepository>(); varportfolioService = MockRepository.GenerateStub<IPortfolioService>(); s.WithScenario("portfolio already exists") .Given("portfolio name is $name", "Aggressive Fund", n => { portfolioName= n; p = new Portfolio { Name = portfolioName }; portfolioRepository. Stub(x => x.FindPortfolioByName(portfolioName)).Return(p); portfolioService. Stub(X => X.CreatePortfolio(p)).Throw(new ItemExistsException()); })
29. Stubbing example Create a new portfolio story .When("portfolio already exists in database", () => Assert.IsNotNull( portfolioRepository.FindPortfolioByName(portfolioName)) ) .Then("new portfolio create should fail", () => Assert.Throws<ItemExistsException>(() => portfolioService.CreatePortfolio(p)) );
34. Test Driven Development Development/Testing Phases Stubs Domain Model User Stories Behaviour Driven Development GUI Testing Fitness User Acceptance Test Unit & Component Test Mocks Implemented Behaviour System Integration Test No Mocks /Stubs Deployment Verification Test
35. Fixtures to Specifications Loosing Assert from tests. Easier to read? For BAs, yes... Assert.IsTrue(component.IsValid) component.IsValid.ShouldBeTrue() Assert.Contains(s, “hello world”); s.ShouldContains(“hello world”); NBehave contains extension methods for NUnit, mbUnit, xUnit
36. Fixtures to Specifications Is it necessary? [TestFixture] [Context] [Test] [Specification] [Context] public class When_using_tokenized_stories { [Specification] public void should_replace_token_with_value() {} Stories for BDD. Specifications for focussed tests. The word Test has become a dirty word...
37. Stories to documentation NBehave-Console.exe PebbleSteps.NBehave.Stories.dll /o stories.txt Theme: Trade Compliance Story: Pretrade compliance check As a Trader I want verify a trade against the portfolio before I call the broker So that the portfolio does not move out of compliance Scenario: trade will move portfolio out of compliance Given portfolio with name Balanced Fund And asset allocation pie contains segments Cash 0.4, Stock 0.3, Property 0.3 And allocation pie 0.05 And portfolio contains Stock IBM 1, Cash GBP 1, Property SW5 1Hb 1, Stock BHP 1 When market prices are IBM 1, GBP 1, SW5 1Hb 1, BHP 1 Then portfolio value is 4 And portfolio constituents are Stock totalValue:2 percentOfPie:0.5 lower:0.25 upper:0.35, Cash totalValue:1 percentOfPie:0.25 lower:0.35 upper:0.45, Property totalValue:1 percentOfPie:0.25 lower:0.25 upper:0.35, And portfolio is balanced
39. Still in beta… What’s left to do? The parameter regular expression is on [a-z][A-Z] $example0, $example1 – In story output first parameter is printed twice Gallio integration/replacement of current story runner Current story runner text output formatting is poor HTML or a XSLT for current XML output Occassional crash in the parsing engine that links text to delegate parameters
40. More information http://nbehave.org/ http://www.codeplex.com/NBehave http://behaviour-driven.org/ http://dannorth.net/ Code will be placed onto www.pebblesteps.com Questions?
Hinweis der Redaktion
Lets dive into TDD and TFD. The famous Red, Green, Green...
Welcome everyone on this cold winter night. This is my first Winter in London so you will have to excuse my scarf and gloves...My name is David Ross and I will be presenting with Chris Roff.Tonight we will be introducing Test Driven Development.
Lets dive into TDD and TFD. The famous Red, Green, Green...
Lets dive into TDD and TFD. The famous Red, Green, Green...