liveBook · Manning

Behavior-driven development

As explained in Build Financial Software with Generative AI (From Scratch)

Behavior-driven development is a software-development and testing practice that specifies expected behavior through human-readable examples accessible to technical and nontechnical stakeholders.

Behavior-driven development (BDD) specifies software through expected behavior, then uses those specifications as acceptance criteria. Its scenarios are written collaboratively by business, QA, and development stakeholders, helping turn user requirements into checks that confirm the application meets expectations. section 2.4.4 section 7.3.1

A BDD scenario describes a feature in human-readable Given/When/Then language. Given establishes the starting state, When performs an action, and Then states the expected result. These tests can run from an IDE, but differ from unit tests in how they are designed and the level at which they execute. section 2.4.4 section 4.3.1

Build a BDD test by separating the readable specification from its Python support:

  • Create a feature file containing a feature and one or more scenarios in Given/When/Then form. section 4.3.1
  • Load the feature scenarios and implement step definitions that connect each phrase to setup, API calls, or assertions. section 4.3.1
  • Share state between steps with fixtures when a later assertion needs an API response or processor instance. section 4.3.1 section 7.3.1
  • Expand the grammar as new behavior is needed; existing flexible steps can support a new scenario without new code. section 8.6

Checking an API response

A files-endpoint scenario starts with a clean database, posts one or more ACH files, requests the file list, and verifies names, credit and debit totals, and the absence of exceptions. Python step definitions perform the requests, retain the response, and assert the stated conditions. section 7.3.1

Listing 7.11 BDD-style scenarios
Feature: The /files endpoint
  Test the functionality of the /files endpoint

  Scenario: I want to get a list that contains a single file
    Given that I have a clean database
    And that I have posted the file "sample.ach"
    When I request a list of files
    Then I should have a single file named "sample.ach"
    And it should have a total credit amount of "1146114.80"
    And it should have a total debit amount of "78.25"
    And there should be no exceptions

  Scenario: I want to get a list of files
    Given that I have a clean database
    And that I have posted the file "sample.ach"
    And that I have posted the file "sample1.ach"
    When I request a list of files
    Then I should have a file that includes the file "sample.ach"
    And I should have a file that includes the file "sample1.ach"
    And there should be no exceptions

This scenario shows how stakeholder-readable setup, API actions, and business-facing assertions become an executable test. section 7.3.1

BDD can also guide design before implementation. A transaction-search scenario prompts decisions about searchable fields, whether criteria combine with AND or OR, and whether the UI or server interprets a single search input. The scenario then defines a concrete expected result for the chosen behavior. section 9.2.1

Use BDD-style syntax to create test data as well as verify behavior. File-creation scenarios can describe batch counts, debit or credit entries, amounts, names, and expected file contents, enabling short cycles that expose problems across generation, parsing, APIs, and the UI. Such generated files may not enforce every business rule unless that behavior is explicitly added. section 7.6

Treat scenarios as first-class work alongside production code. As requirements grow, add cases for record counts, batches, exceptions, and new endpoint behavior; run broader or slower tests through CI/CD when component dependencies make them unsuitable for a rapid development suite. section 7.3.1 section 4.3.1

How Build Financial Software with Generative AI (From Scratch) covers it

How deep it goes
Walks through feature files, step definitions, fixtures, reusable grammar, and API assertions without detailing pytest-bdd internals.
Examples
Uses ACH record parsing, file-list responses, exception retrieval, application fields, file creation, and transaction search scenarios.
What it assumes
Introduces Given/When/Then from zero while assuming enough Python and API familiarity to implement fixtures and step definitions.
What you can do after
Apply it via pytest-bdd to express API behavior as executable Given/When/Then scenarios and implement supporting steps.
How it connects
Connects BDD with unit testing, acceptance criteria, API testing, CI/CD, test data generation, and debugging.

Also explained in

Compare how 4 books explain behavior-driven development →

Related concepts

This explainer was generated by Manning's knowledge graph from the text of Build Financial Software with Generative AI (From Scratch). The section links point to the parts of the book it draws on.