{"id":8453,"date":"2017-08-31T00:39:36","date_gmt":"2017-08-31T05:39:36","guid":{"rendered":"https:\/\/daedtech.wpenginepowered.com\/?p=8453"},"modified":"2022-06-17T11:35:30","modified_gmt":"2022-06-17T16:35:30","slug":"getting-started-behavior-driven-development","status":"publish","type":"post","link":"https:\/\/daedtech.com\/getting-started-behavior-driven-development\/","title":{"rendered":"Getting Started with Behavior-Driven Development"},"content":{"rendered":"<p><em>Editorial note: I originally wrote this post for the TechTown blog. \u00a0You can <a href=\"http:\/\/techtowntraining.com\/resources\/blog\/getting-started-behavior-driven-development\">check it out here, at their site<\/a>. \u00a0While you&#8217;re there, have a look around at the different training courses they offer.<\/em><\/p>\n<p>You&#8217;ve probably heard of <a href=\"https:\/\/www.plutora.com\/blog\/behavior-driven-development\">behavior-driven development<\/a> (BDD). \u00a0However, if you&#8217;ve never practiced it, you may perceive it as one of many in a nebulous cloud of acronyms. \u00a0We have BDD, TDD, DDD, and ATDD. \u00a0All of these have a &#8220;D&#8221; standing for &#8220;driven&#8221; and another one standing for either &#8220;development&#8221; or &#8220;design.&#8221; \u00a0Apparently, we software developers really like things to drive us.<\/p>\n<p><a href=\"https:\/\/daedtech.com\/wp-content\/uploads\/2015\/03\/GrabTheWheel.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-4627\" src=\"https:\/\/daedtech.com\/wp-content\/uploads\/2015\/03\/GrabTheWheel.png\" alt=\"\" width=\"814\" height=\"397\" srcset=\"https:\/\/daedtech.com\/wp-content\/uploads\/2015\/03\/GrabTheWheel.png 814w, https:\/\/daedtech.com\/wp-content\/uploads\/2015\/03\/GrabTheWheel-300x146.png 300w\" sizes=\"auto, (max-width: 814px) 100vw, 814px\" \/><\/a><\/p>\n<p>I won&#8217;t engage in a full &#8220;DD&#8221; taxonomy here, as this post concerns itself with behavior-driven development only. \u00a0But we will need to take a tour through one of these in order to understand BDD&#8217;s motivations and backstory.<\/p>\n<h3>Behavior-Driven Development Origins and Motivation<\/h3>\n<p>To understand BDD, we must first understand test-driven development (TDD). \u00a0Luckily, I wrote <a href=\"http:\/\/techtowntraining.com\/blog\/2017\/how-youre-probably-misunderstanding-tdd\/\">a recent primer on that<\/a>. \u00a0To recap briefly, TDD calls for you to address every new thing you want your production code to do by first writing a failing test. \u00a0Doing this both verifies that the system currently lacks the needed functionality and gives you a way to later know that you&#8217;ve successfully implemented it.<\/p>\n<p>With TDD, you deal in\u00a0<a href=\"http:\/\/anarchycreek.com\/2009\/05\/20\/theyre-called-microtests\/\">microtests<\/a>. \u00a0These distinguish themselves by being quite specific and granular. \u00a0For instance, you might assert that you get a null reference exception when invoking a method with a null parameter. \u00a0You&#8217;ll pardon non-technical project stakeholders for a distinct lack of interest in these microtests.<\/p>\n<p>BDD evolved from asking the question, &#8220;Why don&#8217;t we do this for tests that the business might care about?&#8221; \u00a0It follows the same philosophical approach and logic. \u00a0But instead of worrying about null parameters and exceptions, these tests address the system&#8217;s behavior at the capability or feature level.<\/p>\n<p>Behavior-driven development follows the TDD cadence: express a current system deficiency with a failing test. But this time the failing test is, for example,\u00a0<em>when I deposit money into my checking account, I can see the reflected balance.<\/em> \u00a0Work then proceeds on that feature until the test passes. \u00a0At this time, the team considers the card complete.<\/p>\n<p><!--more--><\/p>\n<h3>Speaking the Language of the Business<\/h3>\n<p>The first thing you probably find yourself wondering is how this works from a nuts and bolts perspective. \u00a0Sure, it makes for a great concept. \u00a0But how exactly do you translate businesspeople&#8217;s English into code? \u00a0Enter a clever construct called <a href=\"https:\/\/github.com\/cucumber\/cucumber\/wiki\/Gherkin\">Gherkin<\/a>.<\/p>\n<p>Gherkin operates via a simple but clever premise&#8212;restrict English to a very narrow, and thus parsable, subset. \u00a0Let&#8217;s look at an example.<\/p>\n<pre class=\"lang:default decode:true\">Given a checking account balance of $100\r\nWhen I deposit $50\r\nThen I should see a balance of $150<\/pre>\n<p>This won&#8217;t exactly win a Pulitzer Prize, but programmers and business folks alike can easily read and understand it. \u00a0And for this compromise in eloquence, you get the kind of pattern that makes programming languages work. \u00a0&#8220;Given,&#8221; &#8220;when,&#8221; and &#8220;then&#8221; all represent meaningful language keywords. \u00a0A framework uses these to map the statements that come next to methods in source code.<\/p>\n<h3>And Then Translating Business Language to Code<\/h3>\n<p>To understand how that works, consider some C# code. \u00a0This represents a relatively concrete example of mapping the statement following the given keyword to some actual, executable code in your codebase.<\/p>\n<pre class=\"lang:default decode:true \">[Given(@\"a checking account balance of \\$(.*)\")]\r\npublic void GivenACheckingAccountBalanceOf(decimal amount)\r\n{\r\n    var account = new CheckingAccount() { Balance = amount };\r\n}<\/pre>\n<p>The first line of code contains a <a href=\"https:\/\/www.tutorialspoint.com\/csharp\/csharp_attributes.htm\">C# attribute<\/a>\u00a0(equivalent to a Java annotation, for you Java folks). \u00a0This attribute links the English text to the method in question. \u00a0As you can see, it also uses an escaped variable to translate the number 100 into a variable for the method.<\/p>\n<p>From there, you have it pretty easy. \u00a0The &#8220;given&#8221; stipulates a checking account balance of $100. \u00a0So you oblige in the code of your domain by creating a checking account with a $100 balance. \u00a0You would follow suit for implementations of the &#8220;when&#8221; and &#8220;then&#8221; keywords as well. \u00a0All of these combine to translate simple English into tests in your code. \u00a0And your BDD framework will have enough smarts to execute the methods in the proper order.<\/p>\n<p>Now I should mention at this point that things aren&#8217;t\u00a0<em>quite<\/em> this simple. \u00a0You will need to manage some class-level state between invocations of these methods. \u00a0In other words, in the method above, I declare a variable with only method scope. \u00a0Obviously, you couldn&#8217;t do anything useful with that in the &#8220;when&#8221; and &#8220;then&#8221; methods. \u00a0I&#8217;m just using this oversimplified code to demonstrate the business-language-to-code mapping.<\/p>\n<h3>Collaborating with Business Stakeholders<\/h3>\n<p>Now that you understand how this works conceptually, we can revisit how you approach this development paradigm. \u00a0With TDD, you write a failing test, make it pass, and then refactor, all the while keeping all remaining tests green and passing. \u00a0What kind of cadence do you adopt with BDD?<\/p>\n<p>To understand that, think beyond the development team. \u00a0This approach fits in pretty seamlessly with Scrum and its roles and stakeholders. \u00a0For example, imagine a <a href=\"http:\/\/www.scrum-institute.org\/The_Scrum_Product_Backlog.php\">product backlog<\/a> filled with <a href=\"https:\/\/www.mountaingoatsoftware.com\/agile\/user-stories\">user stories<\/a>. \u00a0Working with the product owner and any necessary analysts, you can pretty easily express a user story as one or more Gherkin scenarios. \u00a0A\u00a0<a href=\"https:\/\/www.scrumalliance.org\/community\/articles\/2013\/2013-april\/introducing-the-three-amigos\">so-called three amigos<\/a>\u00a0collaboration between BAs, developers, and testers can result in the writing of failing Gherkin scenarios.<\/p>\n<p>The development team then gets them to pass. \u00a0After that, the QA team verifies their passing, and the product owner or business stakeholders signify their acceptance of the effort.<\/p>\n<p>As for the development team&#8217;s cadence with the scenarios, that also becomes simple. \u00a0You have a backlog that prioritizes scenarios (stories) by business value. \u00a0The team picks one up, expresses it with a red behavior\/test, and gets that test to pass without breaking others. \u00a0It echoes the TDD cadence.<\/p>\n<h3>The BDD\/TDD Cycle<\/h3>\n<p>That brings up the obvious question of how to practice BDD and TDD simultaneously. \u00a0People often wonder about this after receiving an introduction to the topic, and understandably so.<\/p>\n<p>To clear the muddied waters, consider that these two practices occur at different levels of granularity. \u00a0BDD operates at the granularity of features and components, whereas TDD operates at the granularity of methods. \u00a0When you implement a feature in your codebase, you usually add or modify many different methods and classes. \u00a0This means that TDD practitioners write many different microtests during feature development.<\/p>\n<p>This idea translates naturally to the BDD\/TDD cycle, as illustrated <a href=\"https:\/\/saucelabs.com\/blog\/a-two-minute-bdd-overview\">by the diagram in this post<\/a>. \u00a0You write a failing acceptance test\/behavior first. \u00a0You then enter into your TDD cycle, working on the feature with your normal red-green-refactor cadence. \u00a0After some number of those cycles, you&#8217;ll finish the feature\/behavior, resulting in a green acceptance test.<\/p>\n<h3>Getting Started on Your Tech Stack<\/h3>\n<p>While I used an example in C# earlier, I could have picked pretty much any language. \u00a0I have this flexibility because of the language-agnostic nature of Gherkin. \u00a0Quite simply, you can use Gherkin in just about any tech stack you please.<\/p>\n<p>All you need is a framework for wiring the Gherkin to the tests in your language. \u00a0If one doesn&#8217;t exist, you could always write one, but plenty of them exist. \u00a0<a href=\"https:\/\/automationpanda.com\/2017\/02\/04\/bdd-101-frameworks\/\">This post contains an impressive breakdown of your options, organized by tech stack<\/a>. \u00a0As you can see, you have plenty of options with major programming languages.<\/p>\n<p>From here, your best bet is to pick one, install it, and try it out. \u00a0I can speak from experience in saying that experimentation is your quickest path to getting comfortable. \u00a0By no means have you completed your learning on the subject, but hopefully things have been demystified enough for you that you&#8217;re ready to try it out for yourself.<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Editorial note: I originally wrote this post for the TechTown blog. \u00a0You can check it out here, at their site. \u00a0While you&#8217;re there, have a look around at the different training courses they offer. You&#8217;ve probably heard of behavior-driven development (BDD). \u00a0However, if you&#8217;ve never practiced it, you may perceive it as one of many&#8230;<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","footnotes":""},"categories":[71],"tags":[184,10,226,181],"class_list":["post-8453","post","type-post","status-publish","format-standard","hentry","category-language-agnostic","tag-bdd","tag-c","tag-techtown","tag-testing"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Getting Started with Behavior-Driven Development - DaedTech<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"http:\/\/techtowntraining.com\/resources\/blog\/getting-started-behavior-driven-development\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:title\" content=\"Getting Started with Behavior-Driven Development - DaedTech\" \/>\n<meta name=\"twitter:description\" content=\"Editorial note: I originally wrote this post for the TechTown blog. \u00a0You can check it out here, at their site. \u00a0While you&#8217;re there, have a look around at the different training courses they offer. You&#8217;ve probably heard of behavior-driven development (BDD). \u00a0However, if you&#8217;ve never practiced it, you may perceive it as one of many...\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/daedtech.com\/wp-content\/uploads\/2015\/03\/GrabTheWheel.png\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Erik Dietrich\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"http:\\\/\\\/techtowntraining.com\\\/resources\\\/blog\\\/getting-started-behavior-driven-development#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/daedtech.com\\\/getting-started-behavior-driven-development\\\/\"},\"author\":{\"name\":\"Erik Dietrich\",\"@id\":\"https:\\\/\\\/daedtech.com\\\/#\\\/schema\\\/person\\\/3dae63e91a0fa60c8051a2171fa687d2\"},\"headline\":\"Getting Started with Behavior-Driven Development\",\"datePublished\":\"2017-08-31T05:39:36+00:00\",\"dateModified\":\"2022-06-17T16:35:30+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/daedtech.com\\\/getting-started-behavior-driven-development\\\/\"},\"wordCount\":1266,\"commentCount\":4,\"publisher\":{\"@id\":\"https:\\\/\\\/daedtech.com\\\/#organization\"},\"image\":{\"@id\":\"http:\\\/\\\/techtowntraining.com\\\/resources\\\/blog\\\/getting-started-behavior-driven-development#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/daedtech.com\\\/wp-content\\\/uploads\\\/2015\\\/03\\\/GrabTheWheel.png\",\"keywords\":[\"BDD\",\"C#\",\"TechTown\",\"Testing\"],\"articleSection\":[\"Language Agnostic\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"http:\\\/\\\/techtowntraining.com\\\/resources\\\/blog\\\/getting-started-behavior-driven-development#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/daedtech.com\\\/getting-started-behavior-driven-development\\\/\",\"url\":\"http:\\\/\\\/techtowntraining.com\\\/resources\\\/blog\\\/getting-started-behavior-driven-development\",\"name\":\"Getting Started with Behavior-Driven Development - DaedTech\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/daedtech.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"http:\\\/\\\/techtowntraining.com\\\/resources\\\/blog\\\/getting-started-behavior-driven-development#primaryimage\"},\"image\":{\"@id\":\"http:\\\/\\\/techtowntraining.com\\\/resources\\\/blog\\\/getting-started-behavior-driven-development#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/daedtech.com\\\/wp-content\\\/uploads\\\/2015\\\/03\\\/GrabTheWheel.png\",\"datePublished\":\"2017-08-31T05:39:36+00:00\",\"dateModified\":\"2022-06-17T16:35:30+00:00\",\"breadcrumb\":{\"@id\":\"http:\\\/\\\/techtowntraining.com\\\/resources\\\/blog\\\/getting-started-behavior-driven-development#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"http:\\\/\\\/techtowntraining.com\\\/resources\\\/blog\\\/getting-started-behavior-driven-development\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"http:\\\/\\\/techtowntraining.com\\\/resources\\\/blog\\\/getting-started-behavior-driven-development#primaryimage\",\"url\":\"https:\\\/\\\/daedtech.com\\\/wp-content\\\/uploads\\\/2015\\\/03\\\/GrabTheWheel.png\",\"contentUrl\":\"https:\\\/\\\/daedtech.com\\\/wp-content\\\/uploads\\\/2015\\\/03\\\/GrabTheWheel.png\",\"width\":814,\"height\":397},{\"@type\":\"BreadcrumbList\",\"@id\":\"http:\\\/\\\/techtowntraining.com\\\/resources\\\/blog\\\/getting-started-behavior-driven-development#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/daedtech.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Getting Started with Behavior-Driven Development\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/daedtech.com\\\/#website\",\"url\":\"https:\\\/\\\/daedtech.com\\\/\",\"name\":\"DaedTech\",\"description\":\"Stories about Software\",\"publisher\":{\"@id\":\"https:\\\/\\\/daedtech.com\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/daedtech.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/daedtech.com\\\/#organization\",\"name\":\"DaedTech LLC\",\"url\":\"https:\\\/\\\/daedtech.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/daedtech.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/daedtech.com\\\/wp-content\\\/uploads\\\/2015\\\/07\\\/SmallLogo.jpg\",\"contentUrl\":\"https:\\\/\\\/daedtech.com\\\/wp-content\\\/uploads\\\/2015\\\/07\\\/SmallLogo.jpg\",\"width\":82,\"height\":84,\"caption\":\"DaedTech LLC\"},\"image\":{\"@id\":\"https:\\\/\\\/daedtech.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/daedtech.com\\\/#\\\/schema\\\/person\\\/3dae63e91a0fa60c8051a2171fa687d2\",\"name\":\"Erik Dietrich\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/691ca004bd18f464e9467b2f838e8fbc7a9a2c9eb8568b04a834ac653f3ab1d7?s=96&d=wavatar&r=pg\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/691ca004bd18f464e9467b2f838e8fbc7a9a2c9eb8568b04a834ac653f3ab1d7?s=96&d=wavatar&r=pg\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/691ca004bd18f464e9467b2f838e8fbc7a9a2c9eb8568b04a834ac653f3ab1d7?s=96&d=wavatar&r=pg\",\"caption\":\"Erik Dietrich\"},\"sameAs\":[\"https:\\\/\\\/daedtech.com\"],\"url\":\"https:\\\/\\\/daedtech.com\\\/author\\\/erik\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Getting Started with Behavior-Driven Development - DaedTech","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"http:\/\/techtowntraining.com\/resources\/blog\/getting-started-behavior-driven-development","twitter_card":"summary_large_image","twitter_title":"Getting Started with Behavior-Driven Development - DaedTech","twitter_description":"Editorial note: I originally wrote this post for the TechTown blog. \u00a0You can check it out here, at their site. \u00a0While you&#8217;re there, have a look around at the different training courses they offer. You&#8217;ve probably heard of behavior-driven development (BDD). \u00a0However, if you&#8217;ve never practiced it, you may perceive it as one of many...","twitter_image":"https:\/\/daedtech.com\/wp-content\/uploads\/2015\/03\/GrabTheWheel.png","twitter_misc":{"Written by":"Erik Dietrich","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"http:\/\/techtowntraining.com\/resources\/blog\/getting-started-behavior-driven-development#article","isPartOf":{"@id":"https:\/\/daedtech.com\/getting-started-behavior-driven-development\/"},"author":{"name":"Erik Dietrich","@id":"https:\/\/daedtech.com\/#\/schema\/person\/3dae63e91a0fa60c8051a2171fa687d2"},"headline":"Getting Started with Behavior-Driven Development","datePublished":"2017-08-31T05:39:36+00:00","dateModified":"2022-06-17T16:35:30+00:00","mainEntityOfPage":{"@id":"https:\/\/daedtech.com\/getting-started-behavior-driven-development\/"},"wordCount":1266,"commentCount":4,"publisher":{"@id":"https:\/\/daedtech.com\/#organization"},"image":{"@id":"http:\/\/techtowntraining.com\/resources\/blog\/getting-started-behavior-driven-development#primaryimage"},"thumbnailUrl":"https:\/\/daedtech.com\/wp-content\/uploads\/2015\/03\/GrabTheWheel.png","keywords":["BDD","C#","TechTown","Testing"],"articleSection":["Language Agnostic"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["http:\/\/techtowntraining.com\/resources\/blog\/getting-started-behavior-driven-development#respond"]}]},{"@type":"WebPage","@id":"https:\/\/daedtech.com\/getting-started-behavior-driven-development\/","url":"http:\/\/techtowntraining.com\/resources\/blog\/getting-started-behavior-driven-development","name":"Getting Started with Behavior-Driven Development - DaedTech","isPartOf":{"@id":"https:\/\/daedtech.com\/#website"},"primaryImageOfPage":{"@id":"http:\/\/techtowntraining.com\/resources\/blog\/getting-started-behavior-driven-development#primaryimage"},"image":{"@id":"http:\/\/techtowntraining.com\/resources\/blog\/getting-started-behavior-driven-development#primaryimage"},"thumbnailUrl":"https:\/\/daedtech.com\/wp-content\/uploads\/2015\/03\/GrabTheWheel.png","datePublished":"2017-08-31T05:39:36+00:00","dateModified":"2022-06-17T16:35:30+00:00","breadcrumb":{"@id":"http:\/\/techtowntraining.com\/resources\/blog\/getting-started-behavior-driven-development#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["http:\/\/techtowntraining.com\/resources\/blog\/getting-started-behavior-driven-development"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"http:\/\/techtowntraining.com\/resources\/blog\/getting-started-behavior-driven-development#primaryimage","url":"https:\/\/daedtech.com\/wp-content\/uploads\/2015\/03\/GrabTheWheel.png","contentUrl":"https:\/\/daedtech.com\/wp-content\/uploads\/2015\/03\/GrabTheWheel.png","width":814,"height":397},{"@type":"BreadcrumbList","@id":"http:\/\/techtowntraining.com\/resources\/blog\/getting-started-behavior-driven-development#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/daedtech.com\/"},{"@type":"ListItem","position":2,"name":"Getting Started with Behavior-Driven Development"}]},{"@type":"WebSite","@id":"https:\/\/daedtech.com\/#website","url":"https:\/\/daedtech.com\/","name":"DaedTech","description":"Stories about Software","publisher":{"@id":"https:\/\/daedtech.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/daedtech.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/daedtech.com\/#organization","name":"DaedTech LLC","url":"https:\/\/daedtech.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/daedtech.com\/#\/schema\/logo\/image\/","url":"https:\/\/daedtech.com\/wp-content\/uploads\/2015\/07\/SmallLogo.jpg","contentUrl":"https:\/\/daedtech.com\/wp-content\/uploads\/2015\/07\/SmallLogo.jpg","width":82,"height":84,"caption":"DaedTech LLC"},"image":{"@id":"https:\/\/daedtech.com\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/daedtech.com\/#\/schema\/person\/3dae63e91a0fa60c8051a2171fa687d2","name":"Erik Dietrich","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/691ca004bd18f464e9467b2f838e8fbc7a9a2c9eb8568b04a834ac653f3ab1d7?s=96&d=wavatar&r=pg","url":"https:\/\/secure.gravatar.com\/avatar\/691ca004bd18f464e9467b2f838e8fbc7a9a2c9eb8568b04a834ac653f3ab1d7?s=96&d=wavatar&r=pg","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/691ca004bd18f464e9467b2f838e8fbc7a9a2c9eb8568b04a834ac653f3ab1d7?s=96&d=wavatar&r=pg","caption":"Erik Dietrich"},"sameAs":["https:\/\/daedtech.com"],"url":"https:\/\/daedtech.com\/author\/erik\/"}]}},"_links":{"self":[{"href":"https:\/\/daedtech.com\/wp-json\/wp\/v2\/posts\/8453","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/daedtech.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/daedtech.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/daedtech.com\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/daedtech.com\/wp-json\/wp\/v2\/comments?post=8453"}],"version-history":[{"count":0,"href":"https:\/\/daedtech.com\/wp-json\/wp\/v2\/posts\/8453\/revisions"}],"wp:attachment":[{"href":"https:\/\/daedtech.com\/wp-json\/wp\/v2\/media?parent=8453"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/daedtech.com\/wp-json\/wp\/v2\/categories?post=8453"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/daedtech.com\/wp-json\/wp\/v2\/tags?post=8453"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}