<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Adventures of an aspiring agile developer in a not-quite agile world : BDD</title><link>http://blogs.msdn.com/agilemonkey/archive/tags/BDD/default.aspx</link><description>Tags: BDD</description><dc:language>en-CA</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Trying out Behave#</title><link>http://blogs.msdn.com/agilemonkey/archive/2007/08/30/trying-out-behave.aspx</link><pubDate>Thu, 30 Aug 2007 14:17:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4644140</guid><dc:creator>casper</dc:creator><slash:comments>9</slash:comments><comments>http://blogs.msdn.com/agilemonkey/comments/4644140.aspx</comments><wfw:commentRss>http://blogs.msdn.com/agilemonkey/commentrss.aspx?PostID=4644140</wfw:commentRss><wfw:comment>http://blogs.msdn.com/agilemonkey/rsscomments.aspx?PostID=4644140</wfw:comment><description>&lt;P&gt;One of the neat things I saw at the Agile conference was a short demo of&amp;nbsp;&lt;A href="http://rspec.rubyforge.org/" mce_href="http://rspec.rubyforge.org/"&gt;RSpec&lt;/A&gt; and &lt;A href="http://dannorth.net/2007/06/introducing-rbehave" mce_href="http://dannorth.net/2007/06/introducing-rbehave"&gt;RBehave&lt;/A&gt;. Intrigued, I did a quick search and found the .NET equivalents: &lt;A href="http://www.codeplex.com/BehaveSharp" mce_href="http://www.codeplex.com/BehaveSharp"&gt;Behave#&lt;/A&gt; and &lt;A href="http://nspec.tigris.org/" mce_href="http://nspec.tigris.org/"&gt;NSpec&lt;/A&gt;. &lt;/P&gt;
&lt;BLOCKQUOTE&gt;&lt;SMALL&gt;
&lt;P&gt;Note: I'm not sure I completely understand the differences between xSpec and xBehave as they both quote Behaviour-Driven Design as their goal. I &lt;I&gt;think&lt;/I&gt; that the Behave libraries are just a way to change the nomenclature of xUnit from 'test' to 'behaviour'. The Spec ones are about writing user stories in a sort of DSL that a product owner or PM could understand.&lt;/P&gt;&lt;/SMALL&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Since developer stories can be user stories, I thought it would fun to use Behave# to implement the Stack example from Jim Newkirk's &lt;A href="http://www.amazon.com/Test-Driven-Development-Microsoft-NET-Professional/dp/0735619484/ref=pd_bbs_sr_1/002-3804747-7410451?ie=UTF8&amp;amp;s=books&amp;amp;qid=1188380071&amp;amp;sr=8-1" mce_href="http://www.amazon.com/Test-Driven-Development-Microsoft-NET-Professional/dp/0735619484/ref=pd_bbs_sr_1/002-3804747-7410451?ie=UTF8&amp;amp;s=books&amp;amp;qid=1188380071&amp;amp;sr=8-1"&gt;Test-Driven Development in .NET&lt;/A&gt; book. Here's what I ended up with (apologies for the formatting - it's much easier to read inside VS):&lt;/P&gt;
&lt;DIV style="FONT-SIZE: 10pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&lt;SPAN style="COLOR: rgb(43,145,175)"&gt;Stack&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt; stack = &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;null&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;bool&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt; isEmpty = &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;false&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;object&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt; tempObject = &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;null&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;, tempObject2 = &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;null&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;, tempObject3 = &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;null&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(43,145,175)"&gt;List&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;int&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;&amp;gt; knownObjects = &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(43,145,175)"&gt;List&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;int&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;&amp;gt;();&lt;BR&gt;knownObjects.Add(1);&lt;BR&gt;knownObjects.Add(2);&lt;BR&gt;knownObjects.Add(3);&lt;BR&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(43,145,175)"&gt;Story&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt; stackStory = &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(43,145,175)"&gt;Story&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;"Basic stack operations"&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;);&lt;BR&gt;&lt;BR&gt;stackStory&lt;BR&gt;&amp;nbsp;&amp;nbsp;.AsA(&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;"developer"&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;)&lt;BR&gt;&amp;nbsp;&amp;nbsp;.IWant(&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;"to peform operations with a stack"&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;)&lt;BR&gt;&amp;nbsp;&amp;nbsp;.SoThat(&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;"I can save my data"&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;);&lt;BR&gt;&lt;BR&gt;stackStory&lt;BR&gt;.WithScenario(&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;"A brand new stack"&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;)&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;.Given(&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;"a stack I created"&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;delegate&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt; { stack = &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(43,145,175)"&gt;Stack&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;(); })&lt;BR&gt;&amp;nbsp;&amp;nbsp;.When(&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;"I query its state"&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;delegate&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt; { isEmpty=stack.IsEmpty; })&lt;BR&gt;&amp;nbsp;&amp;nbsp;.Then(&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;"it should be empty"&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;delegate&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt; { &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(43,145,175)"&gt;Assert&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;.True(isEmpty); })&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;.Given(&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;"a stack I created"&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;)&lt;BR&gt;&amp;nbsp;&amp;nbsp;.When(&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;"I push a single object"&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;, &lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV style="FONT-SIZE: 10pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&lt;SPAN style="COLOR: black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;delegate&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt; { stack.Push(&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;object&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;()); })&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.And(&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;"I query its state"&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;)&lt;BR&gt;&amp;nbsp;&amp;nbsp;.Then(&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;"it should not be empty"&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;, &lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV style="FONT-SIZE: 10pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&lt;SPAN style="COLOR: black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;delegate&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt; { &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(43,145,175)"&gt;Assert&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;.False(isEmpty); })&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;.Given(&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;"a stack I created"&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;)&lt;BR&gt;&amp;nbsp;&amp;nbsp;.When(&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;"I push a single object"&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.And(&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;"pop the object"&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;delegate&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt; {tempObject=stack.Pop(); })&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.And(&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;"I query its state"&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;)&lt;BR&gt;&amp;nbsp;&amp;nbsp;.Then(&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;"it should be empty"&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;)&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;.Given(&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;"a stack I created"&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;)&lt;BR&gt;&amp;nbsp;&amp;nbsp;.When(&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;"I push a known object"&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;, &lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV style="FONT-SIZE: 10pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; delegate&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt; { stack.Push(knownObjects[0]); })&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.And(&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;"pop the object"&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;)&lt;BR&gt;&amp;nbsp;&amp;nbsp;.Then(&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;"the two objects are equal"&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;, &lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV style="FONT-SIZE: 10pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&lt;SPAN style="COLOR: black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;delegate&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt; { &lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV style="FONT-SIZE: 10pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&lt;SPAN style="COLOR: black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(43,145,175)"&gt;Assert&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;.Equal&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;object&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV style="FONT-SIZE: 10pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&lt;SPAN style="COLOR: black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (knownObjects[0], tempObject); })&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;.Given(&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;"a stack I created"&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;)&lt;BR&gt;&amp;nbsp;&amp;nbsp;.When(&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;"I push three known objects"&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;, &lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV style="FONT-SIZE: 10pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&lt;SPAN style="COLOR: black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;delegate&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;{knownObjects.ForEach(&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV style="FONT-SIZE: 10pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&lt;SPAN style="COLOR: black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;delegate&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;int&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt; val){stack.Push(val);});})&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.And(&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;"pop each one "&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;, &lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV style="FONT-SIZE: 10pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&lt;SPAN style="COLOR: black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;delegate&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt; { tempObject = stack.Pop(); &lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV style="FONT-SIZE: 10pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&lt;SPAN style="COLOR: black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tempObject2 = stack.Pop();&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV style="FONT-SIZE: 10pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&lt;SPAN style="COLOR: black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tempObject3 = stack.Pop(); })&lt;BR&gt;&amp;nbsp;&amp;nbsp;.Then(&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;"all three objects are the same"&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;delegate&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(43,145,175)"&gt;Assert&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;.Equal&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;object&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;&amp;gt;(knownObjects[2], tempObject);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(43,145,175)"&gt;Assert&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;.Equal&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;object&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;&amp;gt;(knownObjects[1], tempObject2);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(43,145,175)"&gt;Assert&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;.Equal&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;object&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;&amp;gt;(knownObjects[0], tempObject3);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; })&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;.Given(&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;"a stack I created"&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;)&lt;BR&gt;&amp;nbsp;&amp;nbsp;.When(&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;"I pop an object it throws an exception"&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;, &lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV style="FONT-SIZE: 10pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&lt;SPAN style="COLOR: black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;typeof&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(43,145,175)"&gt;InvalidOperationException&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;), &lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV style="FONT-SIZE: 10pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&lt;SPAN style="COLOR: black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;delegate&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(43,145,175)"&gt;Type&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt; type) &lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV style="FONT-SIZE: 10pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&lt;SPAN style="COLOR: black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(43,145,175)"&gt;Assert&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;.Throws(type, &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;delegate&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt; { stack.Pop(); }); })&lt;BR&gt;&amp;nbsp;&amp;nbsp;.Then(&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;""&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;delegate&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt; { ;})&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;.Given(&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;"a stack I created"&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;)&lt;BR&gt;&amp;nbsp;&amp;nbsp;.When(&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;"I push a single object"&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.And(&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;"call top"&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;delegate&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt; { tempObject = stack.Top(); })&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.And(&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;"I query its state"&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;)&lt;BR&gt;&amp;nbsp;&amp;nbsp;.Then(&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;"it should not be empty"&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;)&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;.Given(&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;"a stack I created"&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;)&lt;BR&gt;&amp;nbsp;&amp;nbsp;.When(&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;"I push a known object"&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.And(&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;"call top"&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;)&lt;BR&gt;&amp;nbsp;&amp;nbsp;.Then(&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;"the two objects are equal"&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;)&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;.Given(&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;"a stack I created"&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;)&lt;BR&gt;&amp;nbsp;&amp;nbsp;.When(&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;"I push three known objects"&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.And(&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;"call top"&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;)&lt;BR&gt;&amp;nbsp;&amp;nbsp;.Then(&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;"the last item is equal to the top one"&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;, &lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV style="FONT-SIZE: 10pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&lt;SPAN style="COLOR: black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;delegate&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV style="FONT-SIZE: 10pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;{ &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(43,145,175)"&gt;Assert&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;.Equal&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;object&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;&amp;gt;(knownObjects[2], tempObject); })&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;.Given(&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;"a stack I created"&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;)&lt;BR&gt;&amp;nbsp;&amp;nbsp;.When(&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;"I push a known object"&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.And(&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;"call top repeatedly"&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;, &lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV style="FONT-SIZE: 10pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&lt;SPAN style="COLOR: black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;delegate&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV style="FONT-SIZE: 10pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;{ &lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV style="FONT-SIZE: 10pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&lt;SPAN style="COLOR: black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tempObject = stack.Top();&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV style="FONT-SIZE: 10pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&lt;SPAN style="COLOR: black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tempObject2 = stack.Top(); &lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV style="FONT-SIZE: 10pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&lt;SPAN style="COLOR: black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tempObject3 = stack.Top();&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV style="FONT-SIZE: 10pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&lt;SPAN style="COLOR: black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; })&lt;BR&gt;&amp;nbsp;&amp;nbsp;.Then(&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;"all objects are equal to what was pushed"&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;delegate&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(43,145,175)"&gt;Assert&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;.Equal&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;object&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;&amp;gt;(knownObjects[0], tempObject);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(43,145,175)"&gt;Assert&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;.Equal&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;object&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;&amp;gt;(knownObjects[0], tempObject2);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(43,145,175)"&gt;Assert&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;.Equal&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;object&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;&amp;gt;(knownObjects[0], tempObject3);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;})&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;.Given(&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;"a stack I created"&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;)&lt;BR&gt;&amp;nbsp;&amp;nbsp;.When(&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;"I call top it throws an exception"&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;, &lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV style="FONT-SIZE: 10pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&lt;SPAN style="COLOR: black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;typeof&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(43,145,175)"&gt;InvalidOperationException&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;), &lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV style="FONT-SIZE: 10pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&lt;SPAN style="COLOR: black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;delegate&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(43,145,175)"&gt;Type&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt; type) &lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV style="FONT-SIZE: 10pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&lt;SPAN style="COLOR: black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(43,145,175)"&gt;Assert&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;.Throws(type, &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;delegate&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt; { stack.Top(); }); })&lt;BR&gt;&amp;nbsp;&amp;nbsp;.Then(&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;""&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;)&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;.Given(&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;"a stack I created"&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;)&lt;BR&gt;&amp;nbsp;&amp;nbsp;.When(&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;"I push a null object"&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;delegate&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt; { stack.Push(&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;null&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;); })&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.And(&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;"I query its state"&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;)&lt;BR&gt;&amp;nbsp;&amp;nbsp;.Then(&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;"it should not be empty"&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;)&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;.Given(&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;"a stack I created"&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;)&lt;BR&gt;&amp;nbsp;&amp;nbsp;.When(&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;"I push a null object"&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.And(&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;"pop the object"&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;)&lt;BR&gt;&amp;nbsp;&amp;nbsp;.Then(&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;"the returned object is null"&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;, &lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV style="FONT-SIZE: 10pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&lt;SPAN style="COLOR: black"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;delegate&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt; { &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(43,145,175)"&gt;Assert&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;.Null(tempObject); })&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;.Given(&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;"a stack I created"&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;)&lt;BR&gt;&amp;nbsp;&amp;nbsp;.When(&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;"I push a null object"&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.And(&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;"call top"&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;)&lt;BR&gt;&amp;nbsp;&amp;nbsp;.Then(&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;"the returned object is null"&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;);&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV style="FONT-SIZE: 10pt; FONT-FAMILY: monospace; BACKGROUND-COLOR: white"&gt;&lt;SPAN style="COLOR: black"&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;and when I run the tests, this is the output: 
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;CODE&gt;&lt;/CODE&gt;
&lt;P&gt;Story: Basic stack operations &lt;/P&gt;
&lt;P&gt;Narrative:&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; As a developer&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; I want to peform operations with a stack&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; So that I can save my data &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Scenario 1: A brand new stack&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Given a stack I created&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; When I query its state&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Then it should be empty &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Given a stack I created&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; When I push a single object&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; And I query its state&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Then it should not be empty &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Given a stack I created&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; When I push a single object&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; And pop the object&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; And I query its state&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Then it should be empty &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Given a stack I created&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; When I push a known object&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; And pop the object&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Then the two objects are equal &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Given a stack I created&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; When I push three known objects&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; And pop each one &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Then all three objects are the same &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Given a stack I created&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; When I pop an object it throws an exception: System.InvalidOperationException&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Then &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Given a stack I created&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; When I push a single object&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; And call top&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; And I query its state&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Then it should not be empty &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Given a stack I created&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; When I push a known object&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; And call top&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Then the two objects are equal &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Given a stack I created&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; When I push three known objects&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; And call top&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Then the last item is equal to the top one &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Given a stack I created&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; When I push a known object&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; And call top repeatedly&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Then all objects are equal to what was pushed &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Given a stack I created&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; When I call top it throws an exception: System.InvalidOperationException&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Then &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Given a stack I created&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; When I push a null object&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; And I query its state&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Then it should not be empty &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Given a stack I created&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; When I push a null object&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; And pop the object&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Then the returned object is null &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Given a stack I created&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; When I push a null object&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; And call top&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Then the returned object is null &lt;/P&gt;
&lt;P&gt;1 passed, 0 failed, 0 skipped, took 1.15 seconds. &lt;/P&gt;
&lt;P&gt;So is it useful? Like most things, there are situations where it's appropriate and others where it's not. I'm starting with a contrived example to begin with, and&amp;nbsp;so not demonstrating its full usefulness. Regardless, there are a few points I'd like to make after playing with it for a while:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;It's nice to repeat snippets of an&amp;nbsp;English sentence instead of code, although&amp;nbsp;I suspect the novelty would fade after a while :) &lt;/LI&gt;
&lt;LI&gt;If you want to specify Exceptions as part of your story, this forces you to move away from [ExpectedException]. Which is a&lt;B&gt; Good Thing&lt;/B&gt; anyway. I'm using an &lt;A href="http://www.codeplex.com/ObjectBuilder/SourceControl/DirectoryView.aspx?SourcePath=%24%2fObjectBuilder%2fSamples%2fCodePlexContainer%2fSource%2fUnitTest.DependencyInjection%2fAssert&amp;amp;changeSetId=24909" mce_href="http://www.codeplex.com/ObjectBuilder/SourceControl/DirectoryView.aspx?SourcePath=%24%2fObjectBuilder%2fSamples%2fCodePlexContainer%2fSource%2fUnitTest.DependencyInjection%2fAssert&amp;amp;changeSetId=24909"&gt;Assert replacement&lt;/A&gt; from Codeplex to accomplish this. &lt;/LI&gt;
&lt;LI&gt;I'm a big fan of having very descriptive method names for unit tests - this is taking descriptive to the next level :)&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;On the (possibly)&amp;nbsp;less good side of things:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;If a story fails, then the rest of the test isn't executed. It doesn't make sense to only put one scenario per test either, because then you'll end up repeating the delegate code. &lt;/LI&gt;
&lt;LI&gt;If a story fails, it's sometimes really awkward to figure out why. It's really annoying when you have to debug into the delegate. &lt;/LI&gt;
&lt;LI&gt;The test/stories are dependent on each other. This is a very disconcerting concept coming from an EDD background.&lt;/LI&gt;
&lt;LI&gt;It's very difficult to test loops, or perhaps I just haven't found a good way. If you look at the place where &lt;CODE&gt;Top()&lt;/CODE&gt; is called repeatedly (fifth last story) and we check to make sure it always returns the same value, I had to use named objects to accomplish this. The original test looked like this:&lt;BR&gt;&lt;BR&gt;&lt;CODE&gt;[Test]&lt;BR&gt;public void PushTopNoStackStateChange()&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; string pushed = "44";&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; stack.Push(pushed);&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for(int index = 0; index &amp;lt; 10; index++)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string topped = (string)stack.Top();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Assert.AreEqual(pushed, topped);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;}&lt;/CODE&gt;&lt;BR&gt;&lt;BR&gt;and I would claim that's easier to read. There's some flexibility lost there.&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;I'd like to see some more real world examples of this being used; this could be a powerful tool in the right circumstances. And of course as the library is enhanced, some of the things I've talked about may become more feasable.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=4644140" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/agilemonkey/archive/tags/BDD/default.aspx">BDD</category></item></channel></rss>