<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/css" href="/stylesheets/rss.css"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>Object Mentor Blog: Specs vs. Tests</title>
    <link>http://blog.objectmentor.com/articles/2007/02/01/specs-vs-tests</link>
    <language>en-us</language>
    <ttl>40</ttl>
    <description></description>
    <item>
      <title>Specs vs. Tests</title>
      <description>&lt;p&gt;There&amp;#8217;s something to this &lt;span class="caps"&gt;BDD&lt;/span&gt; kool-aid that people have been drinking lately&amp;#8230;&lt;/p&gt;


	&lt;p&gt;As part of the Rails project I&amp;#8217;ve been working on for the last few weeks, I&amp;#8217;ve been using &lt;a href="http://rspec.rubyforge.org/"&gt;RSpec&lt;/a&gt;.  RSpec is a unit testing tool similar in spirit to &lt;a href="www.junit.org"&gt;JUnit&lt;/a&gt; or &lt;a href="http://www.ruby-doc.org/stdlib/libdoc/test/unit/rdoc/index.html"&gt;Test/Unit&lt;/a&gt;.  However RSpec uses an alternative syntax that reads more like a &lt;em&gt;specification&lt;/em&gt; than like a test. Let me show you what I mean.&lt;/p&gt;


In Java, using JUnit, we might write the following unit test:
&lt;pre&gt;&lt;code&gt;public class BowlingGameTest extends TestCase {
  private Game g;

  protected void setUp() throws Exception {
    g = new Game();
  }

  private void rollMany(int n, int pins) {
    for (int i=0; i&amp;lt; n; i++) {
      g.roll(pins);
    }
  }

  public void testGutterGame() throws Exception {
    rollMany(20, 0);
    assertEquals(0, g.score());
    assertTrue(g.isComplete());
  }

  public void testAllOnes() throws Exception {
    rollMany(20,1);
    assertEquals(20, g.score());
    assertTrue(g.isComplete());
  }
}&lt;/code&gt;&lt;/pre&gt;
This is pretty typical for a Java unit test.  The setup function builds the &lt;code&gt;Game&lt;/code&gt; object, and then the various test functions make sure that it works in each different scenario.

In Ruby however, this might be expressed using RSpec as:
&lt;pre&gt;&lt;code&gt;require 'rubygems'
require_gem "rspec" 
require 'game'

context "When a gutter game is rolled" do
  setup do
    @g = Game.new
    20.times {@g.roll 0}
  end

  specify "score should be zero" do
    @g.score.should == 0
  end

  specify "game should be complete" do
    @g.complete?.should_be true
  end
end

context "When all ones are rolled" do
  setup do
    @g = Game.new
    20.times{@g.roll 1}
  end

  specify "score should be 20" do
    @g.score.should == 20
  end

  specify "game should be complete" do
    @g.complete?.should_be true
  end
end
&lt;/code&gt;&lt;/pre&gt;
At first blush the difference seems small.  Indeed, the RSpec code might seem too verbose and fine-grained.  At least that was my first impression when I first saw RSpec.  However, having used it now for several months I have a different reaction.

	&lt;p&gt;First, let&amp;#8217;s looks a the semantic differences.  In JUnit you have &lt;code&gt;TestCase&lt;/code&gt; derivatives, and test functions.  Each &lt;code&gt;TestCase&lt;/code&gt; derivative has a &lt;code&gt;setUp&lt;/code&gt; and &lt;code&gt;tearDown&lt;/code&gt; function, and a suite of &lt;code&gt;test&lt;/code&gt; functions.  In RSpec you have what appears to be an extra layer.  You have the test script, which is composed of &lt;code&gt;context&lt;/code&gt; blocks.  The contexts have &lt;code&gt;setup&lt;/code&gt;, &lt;code&gt;teardown&lt;/code&gt;, and &lt;code&gt;specify&lt;/code&gt; blocks.&lt;/p&gt;


	&lt;p&gt;At first you might think that the RSpec &lt;code&gt;context&lt;/code&gt; block coresponds to the Java &lt;code&gt;TestCase&lt;/code&gt; derivative since they are semantically equivalent.  However Java throws something of a curve at us by only allowing one public class per file.  So from an organizational point of view there is a stronger equivalence between the &lt;code&gt;TestCase&lt;/code&gt; derivative and the whole RSpec test script.&lt;/p&gt;


	&lt;p&gt;This might seem petty.  After all, I can write Java code that is semantically equivalent to the RSpec code simply by creating two &lt;code&gt;TestCase&lt;/code&gt; derivatives in two different files.  But separating those two test cases into two different files makes a big difference to me.  It breaks apart things that otherwise want to stay together.&lt;/p&gt;


	&lt;p&gt;Now it&amp;#8217;s true that I could keep the &lt;code&gt;TestCase&lt;/code&gt; derivatives in the same file  by making them &lt;code&gt;package&lt;/code&gt; scope, and manually put them into a public &lt;code&gt;TestSuite&lt;/code&gt; class.  But who wants to do that?  After all, my &lt;span class="caps"&gt;IDE&lt;/span&gt; is nice enough to find and execute all the &lt;em&gt;public&lt;/em&gt; &lt;code&gt;TestCase&lt;/code&gt; derivatives, which completely eliminates the need for me to build suites&amp;#8212;at least at first.&lt;/p&gt;


	&lt;table&gt;
		&lt;tr style="background:#d0d0ff;color:blue;"&gt;
			&lt;td&gt;Note: The &lt;a href="http://www.laughingpanda.org/projects/jdave/"&gt;JDave&lt;/a&gt; tool provides &lt;span class="caps"&gt;BDD&lt;/span&gt; syntax for Java.&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/table&gt;




	&lt;p&gt;Again, this might seem petty; and if that were the only benefit to the RSpec syntax I would agree.  But it&amp;#8217;s not the only benefit.&lt;/p&gt;


	&lt;p&gt;Strange though it may seem, the next benefit is the &lt;em&gt;strings&lt;/em&gt; that describe the &lt;code&gt;context&lt;/code&gt; and &lt;code&gt;specify&lt;/code&gt; blocks.  At first I thought these strings were just noise, like the strings in the JUnit &lt;code&gt;assert&lt;/code&gt; functions.  I seldom, if ever, use the JUnit &lt;code&gt;assert&lt;/code&gt; strings, so why would I use the &lt;code&gt;context&lt;/code&gt; and &lt;code&gt;specify&lt;/code&gt; strings?  But over the last few weeks I have come to find that, unlike the JUnit &lt;code&gt;assert&lt;/code&gt; strings, the RSpec strings put a subtle force on me to create better test designs.&lt;/p&gt;


	&lt;h3&gt;&lt;em&gt;Stable State&lt;/em&gt;: An Emergent Rule.&lt;/h3&gt;


	&lt;p&gt;When a spec fails, the message that gets printed is the concatenation of the &lt;code&gt;context&lt;/code&gt; string and the &lt;code&gt;specify&lt;/code&gt; string.  For example: &lt;code&gt;'When a gutter game is rolled game should be complete' FAILED&lt;/code&gt;.  If you word the context and specify strings properly, these error message make nice sentences.  Since, in &lt;span class="caps"&gt;TDD&lt;/span&gt;, we almost always start out with our tests failing, I see these error message a lot.  So there is a pressure on me to word them well.&lt;/p&gt;


	&lt;p&gt;But by wording them well, I am constrained to obey a rule that JUnit never put pressure on me to obey.  Indeed, I didn&amp;#8217;t know it &lt;em&gt;was&lt;/em&gt; a rule until I started using RSpec.  I call this rule &lt;em&gt;Stable State&lt;/em&gt;, it is:&lt;/p&gt;


	&lt;blockquote&gt;
		&lt;p&gt;Tests don&amp;#8217;t change the state.&lt;/p&gt;
	&lt;/blockquote&gt;


	&lt;p&gt;In other words, the functions that make assertions about the state of the system, do not also change the state of the system.  The state of the system is set up once in the &lt;code&gt;setUp&lt;/code&gt; function, and then only interrogated by the &lt;code&gt;test&lt;/code&gt; functions.&lt;/p&gt;


	&lt;p&gt;If you look carefully at the specification of the Bowling Game you will see that the state of the &lt;code&gt;Game&lt;/code&gt; is changed only by the &lt;code&gt;setup&lt;/code&gt; block within the &lt;code&gt;context&lt;/code&gt; blocks.  The &lt;code&gt;specify&lt;/code&gt; blocks simply interrogate and verify state.  This is in stark contrast to the JUnit tests in which the &lt;code&gt;test&lt;/code&gt; methods both change and verify the state of the &lt;code&gt;Game&lt;/code&gt;.&lt;/p&gt;


	&lt;p&gt;If you don&amp;#8217;t follow this rule it is hard to get the strings on the &lt;code&gt;context&lt;/code&gt; and &lt;code&gt;specify&lt;/code&gt; blocks to create error messages that read well.  On the other hand, if you make sure that the &lt;code&gt;specify&lt;/code&gt; blocks don&amp;#8217;t change the state, then you can find simple sentences that describe each &lt;code&gt;context&lt;/code&gt; and &lt;code&gt;specify&lt;/code&gt; block.  And so the subtle pressure of the strings has a significant impact on the structure of the tests.&lt;/p&gt;


	&lt;p&gt;I can&amp;#8217;t claim to have discovered the pressure of these strings.  Indeed, Dan North&amp;#8217;s &lt;a href="http://dannorth.net/introducing-bdd/"&gt;original article&lt;/a&gt; on the topic is captivating.  However, I felt the pressure and came to the same conclusion he did, well before I read his article; simply by using a tool inspired by his work.&lt;/p&gt;


	&lt;p&gt;The benefit of &lt;em&gt;Stable State&lt;/em&gt; is that for each set of assertions there is one, and only one place where the state of the system is changed.  Moreover the three level structure provides natural places for groups of state, states, and asserts.&lt;/p&gt;


	&lt;h3&gt;The demise of the &lt;em&gt;One Assert&lt;/em&gt; rule.&lt;/h3&gt;


	&lt;p&gt;There have been other rules like this before.  One that circulated a few years back was:&lt;/p&gt;


	&lt;blockquote&gt;
		&lt;p&gt;One assert per test.&lt;/p&gt;
	&lt;/blockquote&gt;


	&lt;p&gt;I never bought into this rule, and I still don&amp;#8217;t.  It seems arbitrary and inefficient.  Why should I put each &lt;code&gt;assert&lt;/code&gt; statement into it&amp;#8217;s own test method when I can just as well put the &lt;code&gt;assert&lt;/code&gt; statement into a single test method.&lt;/p&gt;


In other words, why prefer this:
&lt;pre&gt;&lt;code&gt;  public void testGutterGameScoreIsZero() throws Exception {
    rollMany(20, 0);
    assertEquals(0, g.score());
  }

  public void testGutterGameIsComplete() throws Exception {
    rollMany(20, 0);
    assertTrue(g.isComplete());
  }&lt;/code&gt;&lt;/pre&gt;
over this:
&lt;pre&gt;&lt;code&gt;  public void testGutterGame() throws Exception {
    rollMany(20, 0);
    assertEquals(0, g.score());
    assertTrue(g.isComplete());
  }&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;I think the authors of the &lt;em&gt;One Assert&lt;/em&gt; rule were trying to achieve the benefits of &lt;em&gt;Stable State&lt;/em&gt;, but missed the mark.  It&amp;#8217;s as though they could smell the rule out there, but couldn&amp;#8217;t quite pinpoint it.&lt;/p&gt;


	&lt;h3&gt;The &lt;em&gt;State Machine&lt;/em&gt; metaphor&lt;/h3&gt;


	&lt;p&gt;When you follow the &lt;em&gt;Stable State&lt;/em&gt; rule your specifications (tests) become a description of a Finite State Machine.  Each &lt;code&gt;context&lt;/code&gt; block describes how to drive the &lt;span class="caps"&gt;SUT&lt;/span&gt; to a given state, and then the &lt;code&gt;specify&lt;/code&gt; blocks describe the attributes of that state.&lt;/p&gt;


	&lt;p&gt;Dan North calls this the &lt;em&gt;Given-When-Then&lt;/em&gt; metaphor.  Consider the following triplet:&lt;/p&gt;


	&lt;blockquote&gt;
		&lt;p&gt;&lt;strong&gt;Given&lt;/strong&gt; a Bowling Game:
&lt;strong&gt;When&lt;/strong&gt; 20 gutter balls are rolled,
&lt;strong&gt;Then&lt;/strong&gt; the score should be zero and the game should be complete.&lt;/p&gt;
	&lt;/blockquote&gt;


	&lt;p&gt;This triplet corresponds nicely to a row in a &lt;em&gt;state transition table&lt;/em&gt;.  Consider, for example, the subway turnstile state machine:&lt;/p&gt;


	&lt;table style="border:1px solid black;padding:2px;"&gt;
		&lt;tr&gt;
			&lt;th&gt;Current State&lt;/th&gt;
			&lt;th&gt;Event&lt;/th&gt;
			&lt;th&gt;New State&lt;/th&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Locked&lt;/td&gt;
			&lt;td&gt;coin&lt;/td&gt;
			&lt;td&gt;Unlocked&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Unlocked&lt;/td&gt;
			&lt;td&gt;pass&lt;/td&gt;
			&lt;td&gt;Locked&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Locked&lt;/td&gt;
			&lt;td&gt;pass&lt;/td&gt;
			&lt;td&gt;Alarm&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Unlocked&lt;/td&gt;
			&lt;td&gt;coin&lt;/td&gt;
			&lt;td&gt;Unlocked&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/table&gt;




	&lt;p&gt;We can read this as follows:&lt;/p&gt;


	&lt;blockquote&gt;
		&lt;p&gt;&lt;span class="caps"&gt;GIVEN&lt;/span&gt; we are in the Locked state, 
&lt;span class="caps"&gt;WHEN&lt;/span&gt; we get a coin event, 
&lt;span class="caps"&gt;THEN&lt;/span&gt; we should be in the Unlocked state.
&lt;del&gt;&amp;#8212;&lt;/del&gt;
&lt;span class="caps"&gt;GIVEN&lt;/span&gt; we are in the Unlocked state, 
&lt;span class="caps"&gt;WHEN&lt;/span&gt; we get a pass event, 
&lt;span class="caps"&gt;THEN&lt;/span&gt; we should be in the Locked state.
&lt;del&gt;&amp;#8212;&lt;/del&gt;
etc.&lt;/p&gt;
	&lt;/blockquote&gt;


	&lt;p&gt;Describing a system as a finite state machine has certain benefits.&lt;/p&gt;


	&lt;ol&gt;
	&lt;li&gt;We can enumerate the states and the events, and then make sure that every combination of state and event is handled properly.&lt;/li&gt;
		&lt;li&gt;We can formalize the behavior of the system into a well known tabular format that can be read and interpreted by machines.
	&lt;ul&gt;
	&lt;li&gt;I am, of course, thinking about &lt;a href="www.fitnesse.org"&gt;FitNesse&lt;/a&gt;&lt;/li&gt;
	&lt;/ul&gt;
	&lt;/li&gt;
		&lt;li&gt;There are well known mechanisms for implementing finite state machines.&lt;/li&gt;
	&lt;/ol&gt;


	&lt;p&gt;The point is that organizing the system description in terms of a finite state machine can have a profound impact on the system design and implementation.&lt;/p&gt;


	&lt;h3&gt;The Butterfly Effect.&lt;/h3&gt;


	&lt;p&gt;I find it remarkable that two dumb annoying little strings put a subtle pressure on me to adjust the style of my tests. That change in style eventually caused me to see the design and implementation of the system I was writing in a very new and interesting light.&lt;/p&gt;</description>
      <pubDate>Thu, 01 Feb 2007 09:32:07 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:8dcd6d9a-ed8c-4cd2-9522-24dc5e67ac19</guid>
      <author>Uncle Bob</author>
      <link>http://blog.objectmentor.com/articles/2007/02/01/specs-vs-tests</link>
      <category>Uncle Bob's Blatherings</category>
      <trackback:ping>http://blog.objectmentor.com/articles/trackback/110</trackback:ping>
    </item>
    <item>
      <title>"Specs vs. Tests" by Learn Spanish Language FREE</title>
      <description>&lt;p&gt;thanks for ur sharing, I like your blog, content is very rich. &lt;a href="http://www.youtube.com/watch?v=AYNtk_LMrho" rel="nofollow"&gt;http://www.youtube.com/watch?v=AYNtk_LMrho&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Mon, 30 Jan 2012 03:05:14 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:ba99e0d7-0260-468d-bd49-b29ef0050422</guid>
      <link>http://blog.objectmentor.com/articles/2007/02/01/specs-vs-tests#comment-200185</link>
    </item>
    <item>
      <title>"Specs vs. Tests" by Harris</title>
      <description>&lt;p&gt;I really like the Stable State idea. &lt;a href="http://www.happypublishing.com/quotations.htm" rel="nofollow"&gt;a thought for the day&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Wed, 28 Dec 2011 22:44:23 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:e9cde3db-895e-4bfe-a0e6-46ac313bd4f8</guid>
      <link>http://blog.objectmentor.com/articles/2007/02/01/specs-vs-tests#comment-193032</link>
    </item>
    <item>
      <title>"Specs vs. Tests" by Wound Bandages</title>
      <description>&lt;p&gt;At first I would congratulate you on writing such a brilliant piece of write-up. You have got some exceptional writing skills that have made your site worth reading.&lt;/p&gt;</description>
      <pubDate>Fri, 16 Dec 2011 04:46:15 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:482aa463-6f27-4699-8a5b-581215abc3b3</guid>
      <link>http://blog.objectmentor.com/articles/2007/02/01/specs-vs-tests#comment-188048</link>
    </item>
    <item>
      <title>"Specs vs. Tests" by LiMelia</title>
      <description>&lt;p&gt;thanks for ur sharing, I like your blog, content is very rich, allow me to leave a message well, wish you are lucky!!!!!
&lt;a href="http://www.junyuetrade.com/" rel="nofollow"&gt;http://www.junyuetrade.com/&lt;/a&gt;&lt;/p&gt;
  
  </description>
      <pubDate>Sun, 27 Nov 2011 04:34:49 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:f48ed140-1a2f-40ec-9eeb-11647b184853</guid>
      <link>http://blog.objectmentor.com/articles/2007/02/01/specs-vs-tests#comment-178878</link>
    </item>
    <item>
      <title>"Specs vs. Tests" by lewis</title>
      <description>&lt;p&gt;Nice pearl at
&lt;a href="http://www.cnwpearl.com" rel="nofollow"&gt;http://www.cnwpearl.com&lt;/a&gt;
&lt;a href="http://www.cnwpearl.com/freshwater-pearl-necklace/c1/index.html" rel="nofollow"&gt;http://www.cnwpearl.com/freshwater-pearl-necklace/c1/index.html&lt;/a&gt;
&lt;a href="http://www.cnwpearl.com/freshwater-pearl-bracelets/c7/index.html" rel="nofollow"&gt;http://www.cnwpearl.com/freshwater-pearl-bracelets/c7/index.html&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Thu, 10 Nov 2011 19:53:19 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:7809e872-6e25-4088-a4d8-adfdd0f00985</guid>
      <link>http://blog.objectmentor.com/articles/2007/02/01/specs-vs-tests#comment-171210</link>
    </item>
    <item>
      <title>"Specs vs. Tests" by renlewei</title>
      <description>&lt;p&gt;&lt;a href="http://www.saleguccinewbags.com/gucci-top-handles-c-53.html " rel="nofollow"&gt;Gucci Top Handles&lt;/a&gt;
&lt;a href="http://www.saleguccinewbags.com/gucci-shoulder-bags-c-55.html " rel="nofollow"&gt;Gucci Shoulder Bags&lt;/a&gt;
&lt;a href="http://www.saleguccinewbags.com/gucci-clutches-c-48.html" rel="nofollow"&gt;Gucci Clutches&lt;/a&gt;
&lt;a href=" &lt;a href=" rel="nofollow"&gt;http://www.saleguccinewbags.com/gucci-boston-bags-c-58.html&lt;/a&gt;"&gt;Gucci Boston Bags
&lt;a href="http://www.saleguccinewbags.com/gucci-messenger-bags-c-59.html " rel="nofollow"&gt;Gucci Messenger Bags&lt;/a&gt;
&lt;a href="http://www.saleguccinewbags.com/" rel="nofollow"&gt;authentic discount gucci bags&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Tue, 20 Sep 2011 04:37:41 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:f92fd5ae-9c77-4272-bbe0-b52f03145343</guid>
      <link>http://blog.objectmentor.com/articles/2007/02/01/specs-vs-tests#comment-143199</link>
    </item>
    <item>
      <title>"Specs vs. Tests" by canada goose coat</title>
      <description>&lt;p&gt;&lt;a href="http://www.shopcanadagoosejackets.com/canada-goose-expedition-parka-c-2.html" rel="nofollow"&gt;Canada Goose Outlet&lt;/a&gt;
is Marmot 8000M Parka. The Marmot 8000M Parka is really a waterproof, breathable jacket with 800 fill &lt;a href="http://www.shopcanadagoosejackets.com/canada-goose-youth-parka-c-7.html" rel="nofollow"&gt;canada goose jacket&lt;/a&gt; feathers. It truly is design and light colored shell is produced for trendy, but uncomplicated, protection from cold temperatures. Reinforced shoulders, elbows and adjustable waist and hem make the Marmot a perfect alternate for skiing and other outdoor sports that want fairly a bit of arm motion. The 8000M Parka weighs three lbs., comes in bonfire and black colours and might be stuffed and stored like a sleeping bag to your convenience.This is one of well-know and prime down jacket brands.Hope our friends like its!Like &lt;a href="http://www.shopcanadagoosejackets.com/canada-goose-womens-c-8.html" rel="nofollow"&gt;canada goose womens&lt;/a&gt; and &lt;a href="http://www.shopcanadagoosejackets.com/canada-goose-expedition-parka-c-2.html" rel="nofollow"&gt;Canada Goose Expedition Parka&lt;/a&gt;.There are &lt;a href="http://www.shopcanadagoosejackets.com/" rel="nofollow"&gt;wholesale canada goose&lt;/a&gt;.&lt;/p&gt;</description>
      <pubDate>Thu, 15 Sep 2011 21:26:46 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:a757c2ac-9995-4a93-9552-4cbb2c26bac7</guid>
      <link>http://blog.objectmentor.com/articles/2007/02/01/specs-vs-tests#comment-140993</link>
    </item>
    <item>
      <title>"Specs vs. Tests" by Diablo3</title>
      <description>&lt;p&gt;Blog posts about wedding and bridal are always rare to find , at least with great quality,you qualify for a great blog post writer title,kep the great job happening&lt;/p&gt;</description>
      <pubDate>Wed, 14 Sep 2011 12:19:36 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:aeeb04f3-a16d-4ece-a4ed-6339012ab779</guid>
      <link>http://blog.objectmentor.com/articles/2007/02/01/specs-vs-tests#comment-140109</link>
    </item>
    <item>
      <title>"Specs vs. Tests" by Crescent Processing Company</title>
      <description>&lt;p&gt;&lt;a href="http://crescentprocessinginformations.webs.com" rel="nofollow"&gt;Crescent Processing Company&lt;/a&gt;
You deserve the best and I know this will just add to your very proud accomplishments in your already beautiful and deserving blessed life. I wish you all the best and again. Thanks a lot..
&lt;a href="http://crescent-processing.blog.co.uk/" rel="nofollow"&gt;Crescent Processing Company&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Fri, 12 Aug 2011 09:18:35 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:723a3676-4dde-4452-862a-243b3231b4e0</guid>
      <link>http://blog.objectmentor.com/articles/2007/02/01/specs-vs-tests#comment-127670</link>
    </item>
    <item>
      <title>"Specs vs. Tests" by kohls printable coupons</title>
      <description>&lt;p&gt;Thanks for the guide, it&amp;#8217;s very helpful.&lt;/p&gt;</description>
      <pubDate>Sat, 11 Jun 2011 19:37:26 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:6d62e775-fc3b-4e54-b3ba-5ac71f26092d</guid>
      <link>http://blog.objectmentor.com/articles/2007/02/01/specs-vs-tests#comment-110110</link>
    </item>
    <item>
      <title>"Specs vs. Tests" by funny pictures</title>
      <description>&lt;p&gt;Yes these are very important indeed&lt;/p&gt;</description>
      <pubDate>Tue, 03 May 2011 03:41:31 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:437c9ee4-fe54-4ba0-a278-fb6dd4bb0541</guid>
      <link>http://blog.objectmentor.com/articles/2007/02/01/specs-vs-tests#comment-94036</link>
    </item>
    <item>
      <title>"Specs vs. Tests" by okey oyunu oyna </title>
      <description>&lt;p&gt;thanks for this post :)&lt;/p&gt;


	&lt;p&gt;D&#252;nyan?n en b&#252;y&#252;k online okey oyunu bu sitede sizleri bekliyor.
 Ger&#231;ek ki?ilerle sohbet ederek  &lt;a href="http://www.okeyoyunu-oyna.com" rel="nofollow"&gt;Okey Oyunu Oyna&lt;/a&gt; ve 
internette online oyun oynaman?n zevkini &#231;?kar&lt;/p&gt;</description>
      <pubDate>Fri, 22 Apr 2011 13:32:20 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:1d322bf5-d705-4065-9721-7f2527200ccb</guid>
      <link>http://blog.objectmentor.com/articles/2007/02/01/specs-vs-tests#comment-89647</link>
    </item>
    <item>
      <title>"Specs vs. Tests" by Nike Sneakers Outlet</title>
      <description>&lt;p&gt;Thank you very good and a healthy writing. I&amp;#8217;ll definitely keep track of posts and the occasional visit. Looking forward to reading your next publish.&lt;a href="http://www.nikesneakersoutlet.com/" rel="nofollow"&gt;Nike Sneakers Outlet
&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Wed, 13 Apr 2011 21:38:52 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:f9d4eed6-934a-47dd-af60-74099f3d3f00</guid>
      <link>http://blog.objectmentor.com/articles/2007/02/01/specs-vs-tests#comment-84549</link>
    </item>
    <item>
      <title>"Specs vs. Tests" by True Religion Jeans Outlet Online</title>
      <description>&lt;p&gt;it is a useful and wonderful website.thanks for your information.&lt;/p&gt;</description>
      <pubDate>Tue, 12 Apr 2011 22:48:16 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:e38cc3e2-6d25-47ce-8de0-61dca241110c</guid>
      <link>http://blog.objectmentor.com/articles/2007/02/01/specs-vs-tests#comment-83627</link>
    </item>
    <item>
      <title>"Specs vs. Tests" by Hotel Bucuresti</title>
      <description>&lt;p&gt;Normally, the tests must reveal the same values as the specs said. However, the reality seems to be very difficult to understand because sometimes the differences are very big.&lt;/p&gt;</description>
      <pubDate>Fri, 01 Apr 2011 09:34:41 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:0b7e0eea-0f57-4c3a-9266-227f1b1fb6dc</guid>
      <link>http://blog.objectmentor.com/articles/2007/02/01/specs-vs-tests#comment-78331</link>
    </item>
    <item>
      <title>"Specs vs. Tests" by SEO Firm India</title>
      <description>&lt;p&gt;enjoyed reading it. I need to read more on this topic&amp;#8230;I admiring time and effort you put in your blog, because it is obviously one great place where I can find lot of useful info..&lt;/p&gt;</description>
      <pubDate>Fri, 18 Mar 2011 12:31:48 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:7901ce73-9a01-4b6d-ac59-2cd1921124a1</guid>
      <link>http://blog.objectmentor.com/articles/2007/02/01/specs-vs-tests#comment-73575</link>
    </item>
    <item>
      <title>"Specs vs. Tests" by cable ties</title>
      <description>&lt;p&gt;Great discussion in here.&lt;/p&gt;</description>
      <pubDate>Thu, 03 Mar 2011 05:20:49 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:af3bcfd6-b761-471c-a0da-6fb9c5669218</guid>
      <link>http://blog.objectmentor.com/articles/2007/02/01/specs-vs-tests#comment-68684</link>
    </item>
    <item>
      <title>"Specs vs. Tests" by cable ties</title>
      <description>&lt;p&gt;Great information in here~&lt;/p&gt;</description>
      <pubDate>Thu, 03 Mar 2011 05:20:33 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:69706724-a9fa-4fd8-a200-9baf04c0d41c</guid>
      <link>http://blog.objectmentor.com/articles/2007/02/01/specs-vs-tests#comment-68683</link>
    </item>
    <item>
      <title>"Specs vs. Tests" by Tenant Screening</title>
      <description>&lt;p&gt;Test-driven development is the most profound and auspicious thing to happen to the software industry since I&#8217;ve been a programmer. I think it&#8217;s even more important than OO.&lt;/p&gt;</description>
      <pubDate>Fri, 18 Feb 2011 10:56:58 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:acfb89fd-c1c0-4218-bd72-e7bd51f8bc00</guid>
      <link>http://blog.objectmentor.com/articles/2007/02/01/specs-vs-tests#comment-64216</link>
    </item>
    <item>
      <title>"Specs vs. Tests" by Criminal Records</title>
      <description>&lt;p&gt;It may very well be that the &#8220;tests&#8221; for a particular class, then, get spread out across many fixtures, instead of feeling like you have to place all tests for a given class in the same TestCase derivative. The fixture names corresponding to system states, not classes. At least that&#8217;s how I&#8217;ve read it.&lt;/p&gt;</description>
      <pubDate>Thu, 17 Feb 2011 17:34:16 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:7b313a08-ee36-4bd2-88ce-538e4beca3fa</guid>
      <link>http://blog.objectmentor.com/articles/2007/02/01/specs-vs-tests#comment-64001</link>
    </item>
    <item>
      <title>"Specs vs. Tests" by Criminal Check</title>
      <description>&lt;p&gt;In other words, the functions that make assertions about the state of the system, do not also change the state of the system.&lt;/p&gt;</description>
      <pubDate>Thu, 27 Jan 2011 16:59:07 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:46a94b0a-a47b-403c-a9b6-b0513605e00c</guid>
      <link>http://blog.objectmentor.com/articles/2007/02/01/specs-vs-tests#comment-59874</link>
    </item>
    <item>
      <title>"Specs vs. Tests" by Criminal Check</title>
      <description>&lt;p&gt;So from an organizational point of view there is a stronger equivalence between the TestCase derivative and the whole RSpec test script.&lt;/p&gt;</description>
      <pubDate>Fri, 21 Jan 2011 10:56:13 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:78a9c968-f101-499e-acc8-6e1db35b0088</guid>
      <link>http://blog.objectmentor.com/articles/2007/02/01/specs-vs-tests#comment-58419</link>
    </item>
    <item>
      <title>"Specs vs. Tests" by hermes replica watches</title>
      <description>&lt;p&gt;no longer visits the &lt;a href="http://www.hermes-birkins.net/categories/hermes-jewellery-58-b0.html" rel="nofollow"&gt;fake hermes bracelet&lt;/a&gt; the communal spaces.&amp;#8221;I&amp;#8217;m sure there are some &lt;a href="http://www.hermes-birkins.net" rel="nofollow"&gt;replica hermes&lt;/a&gt; some nice people here, but they have hermes neck scarf have 13 or&lt;/p&gt;</description>
      <pubDate>Tue, 04 Jan 2011 02:45:41 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:41e483c1-d56f-44b8-be5c-8d8879fffe9d</guid>
      <link>http://blog.objectmentor.com/articles/2007/02/01/specs-vs-tests#comment-54059</link>
    </item>
    <item>
      <title>"Specs vs. Tests" by puma</title>
      <description>&lt;p&gt;If you mean to find great shoes for your children &lt;a &gt;puma speed&lt;/a rel="nofollow"&gt; trainers also provides a mixture of finicky and affordable shoes for them. There are a lot of choices, it is up ring call,Ugg Boots, after by people that indigence an incredible quantity of column. This will make the customers happier.
If you are often tangled in Singapore womens &lt;a &gt;puma future cat&lt;/a rel="nofollow"&gt; shoes sale at Sainte Marie that could enhance operational efficiency, range visibility and turnaround time,&#8221; said Desmond Chan, managing boss, South Asia, Menlo Worldwide Logistics. &#8220;Our multi-client facility in Boon Lay Way provides puma trainers with different flag. puma uk&#8217;s youngest targets are toddlers. The &lt;a &gt;puma for sale&lt;/a rel="nofollow"&gt; shoes are incredibly affordable, yet they still hold the grace. Wearing comfortable shoes will help children exploit better.&lt;/p&gt;</description>
      <pubDate>Mon, 20 Dec 2010 01:36:52 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:db0e2875-d402-43b1-b603-9d3560c8ccf1</guid>
      <link>http://blog.objectmentor.com/articles/2007/02/01/specs-vs-tests#comment-50617</link>
    </item>
    <item>
      <title>"Specs vs. Tests" by iPad video converter for Mac</title>
      <description>&lt;p&gt;When I come to here, I think I am in the right place. the web gives me a lot of infomation, it is very informative. I think lots of people can learn much here. I will come to here again. Thanks.&lt;/p&gt;</description>
      <pubDate>Fri, 03 Dec 2010 06:40:10 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:f74f9659-2075-4346-8de5-0c5d8be5edd6</guid>
      <link>http://blog.objectmentor.com/articles/2007/02/01/specs-vs-tests#comment-45596</link>
    </item>
  </channel>
</rss>

