<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Flexible Diamond &#187; mocking</title>
	<atom:link href="http://blog.flexiblediamond.com/tag/mocking/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.flexiblediamond.com</link>
	<description></description>
	<lastBuildDate>Wed, 02 Sep 2009 12:31:04 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Mocking slavery</title>
		<link>http://blog.flexiblediamond.com/2009/07/mocking-slavery/</link>
		<comments>http://blog.flexiblediamond.com/2009/07/mocking-slavery/#comments</comments>
		<pubDate>Thu, 30 Jul 2009 17:50:41 +0000</pubDate>
		<dc:creator>jamesk</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[actionscript]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[mocking]]></category>
		<category><![CDATA[unit testing]]></category>

		<guid isPermaLink="false">http://blog.hoardinghopes.com/?p=154</guid>
		<description><![CDATA[New to the idea of such mockery, I was very lucky to find a tutorial using the Java version which I could convert as I worked through it.
Now I&#8217;m converted &#8211; it&#8217;s a very neat and fast way of stubbing out the behaviours that I wish to code.
This morning, however, I came across a slightly [...]]]></description>
			<content:encoded><![CDATA[<p>New to the idea of such mockery, I was very lucky to find <a href="http://schuchert.wikispaces.com/Mockito.LoginServiceExample">a tutorial using the Java version</a> which I could convert as I worked through it.</p>
<p>Now I&#8217;m converted &#8211; it&#8217;s a very neat and fast way of stubbing out the behaviours that I wish to code.</p>
<p>This morning, however, I came across a slightly trickier case to mock &#8211; at least, a case that required trial and error, as it hasn&#8217;t been documented that fully.</p>
<p>I have a slave interface:</p>
<div class="geshi no actionscript">
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">public</span> <span class="kw3">interface</span> ISlave <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">function</span> doSthg<span class="br0">&#40;</span><span class="br0">&#41;</span>:<span class="kw3">String</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">function</span> order<span class="br0">&#40;</span>command:<span class="kw3">String</span><span class="br0">&#41;</span>:<span class="kw3">void</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">function</span> answer<span class="br0">&#40;</span><span class="br0">&#41;</span>:<span class="kw3">String</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>And the behaviour I want is that when a slave is ordered to &#8220;doSthg!&#8221;, it should answer() and doSthg() pretty sharpish. So the test looks like this:</p>
<div class="geshi no actionscript">
<ol>
<li class="li1">
<div class="de1">slave.<span class="me1">order</span><span class="br0">&#40;</span><span class="st0">&quot;doSthg!&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">verify<span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">that</span><span class="br0">&#40;</span>slave.<span class="me1">answer</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">verify<span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">that</span><span class="br0">&#40;</span>slave.<span class="me1">doSthg</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<p>To verify().that(slave.answer()) means to verify that slave.answer was called once.</p>
<p>First off, I needed to define the doSthg() and answer() methods, having created a mock slave from the interface (both return a String object):</p>
<div class="geshi no actionscript">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">var</span> slave:ISlave = mock<span class="br0">&#40;</span>ISlave<span class="br0">&#41;</span> as ISlave;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">given<span class="br0">&#40;</span>slave.<span class="me1">doSthg</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>.<span class="me1">willReturn</span><span class="br0">&#40;</span><span class="st0">&quot;done!&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">given<span class="br0">&#40;</span>slave.<span class="me1">answer</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>.<span class="me1">willReturn</span><span class="br0">&#40;</span><span class="st0">&quot;yessir!&quot;</span><span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<p>And then I came to the tricky bit &#8211; since I&#8217;m creating this object out of an Interface definition how can I define the behaviour of slave.order()?</p>
<p>Well, thankfully the GenericAnswer object literally holds the answer to that question &#8211; it is instantiated with a function thus and given to the mock slave.order (if the call parameter is correct!):</p>
<div class="geshi no actionscript">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">var</span> answer:Answer = <span class="kw2">new</span> GenericAnswer<span class="br0">&#40;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span>:<span class="kw3">void</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">trace</span><span class="br0">&#40;</span>slave.<span class="me1">answer</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">trace</span><span class="br0">&#40;</span>slave.<span class="me1">doSthg</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">given<span class="br0">&#40;</span>slave.<span class="me1">order</span><span class="br0">&#40;</span><span class="kw3">eq</span><span class="br0">&#40;</span><span class="st0">&quot;doSthg!&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>.<span class="me1">will</span><span class="br0">&#40;</span>answer<span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<p>So now I have created an ISlave interface with three public methods, and defined how the methods interact, and precisely what parameter in order() will trigger the correct interaction. In full it looks like this:</p>
<div class="geshi no actionscript">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">var</span> slave:ISlave = mock<span class="br0">&#40;</span>ISlave<span class="br0">&#41;</span> as ISlave;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">given<span class="br0">&#40;</span>slave.<span class="me1">doSthg</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>.<span class="me1">willReturn</span><span class="br0">&#40;</span><span class="st0">&quot;done!&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">given<span class="br0">&#40;</span>slave.<span class="me1">answer</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>.<span class="me1">willReturn</span><span class="br0">&#40;</span><span class="st0">&quot;yessir!&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">var</span> answer:Answer = <span class="kw2">new</span> GenericAnswer<span class="br0">&#40;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span>:<span class="kw3">void</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">trace</span><span class="br0">&#40;</span>slave.<span class="me1">answer</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">trace</span><span class="br0">&#40;</span>slave.<span class="me1">doSthg</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">given<span class="br0">&#40;</span>slave.<span class="me1">order</span><span class="br0">&#40;</span><span class="kw3">eq</span><span class="br0">&#40;</span><span class="st0">&quot;doSthg!&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>.<span class="me1">will</span><span class="br0">&#40;</span>answer<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">slave.<span class="me1">order</span><span class="br0">&#40;</span><span class="st0">&quot;doSthg!&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">verify<span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">that</span><span class="br0">&#40;</span>slave.<span class="me1">answer</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">verify<span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">that</span><span class="br0">&#40;</span>slave.<span class="me1">doSthg</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<p>P.S. Obviously, the slave should not have a order() method &#8211; that&#8217;s the responsibility of the master (e.g. master.order(slave, &#8220;doSthg!&#8221;)), but it serves to make this example work, so forgive me!</p>
<script type="text/javascript">
  addthis_url    = 'http%3A%2F%2Fblog.flexiblediamond.com%2F2009%2F07%2Fmocking-slavery%2F';
  addthis_title  = 'Mocking+slavery';
  addthis_pub    = '';
</script><script type="text/javascript" src="http://s7.addthis.com/js/addthis_widget.php?v=12" ></script>
<div id="wherego_related"><h3>Readers who viewed this page also viewed:</h3><ul><li><a href="http://blog.flexiblediamond.com/2009/08/whats-the-point-of-all-this-mockery/">What&#8217;s the point of all this mockery?</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://blog.flexiblediamond.com/2009/07/mocking-slavery/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
