<?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: Testing GUIs Part I: RoR.</title>
    <link>http://blog.objectmentor.com/articles/2007/01/13/testing-guis-part-i-ror</link>
    <language>en-us</language>
    <ttl>40</ttl>
    <description></description>
    <item>
      <title>Testing GUIs Part I: RoR.</title>
      <description>&lt;p&gt;Testing GUIs is one of the the holy grails of Test Driven Develoment (TDD).  Many teams who have adopted &lt;span class="caps"&gt;TDD&lt;/span&gt; for other parts of their projects have, for one reason or another, been unable to adequately test the &lt;span class="caps"&gt;GUI&lt;/span&gt; portion of their code.&lt;/p&gt;


	&lt;p&gt;In this series of article I will show that &lt;span class="caps"&gt;GUI&lt;/span&gt; testing is a solved problem.  Over the years the &lt;span class="caps"&gt;TDD&lt;/span&gt; community has produced and accumulated tools, frameworks, libraries, and techniques that allow any team to test their &lt;span class="caps"&gt;GUI&lt;/span&gt; code as fully as any other part of their code.&lt;/p&gt;


	&lt;h1&gt;Testing GUIs Part I: &lt;span style="color:red;"&gt;Ruby on Rails&lt;/span&gt;&lt;/h1&gt;


	&lt;p&gt;In the world of web development, no community has solved the problem of &lt;span class="caps"&gt;GUI&lt;/span&gt; testing better than the Ruby on Rails community.  When you work on a rails project, testing the &lt;span class="caps"&gt;GUI&lt;/span&gt; is simply &lt;em&gt;de-rigeur&lt;/em&gt;.  The rails framework provides all the necessary tools and access points for testing all aspects of the application, including the generation of &lt;span class="caps"&gt;HTML&lt;/span&gt; and the structure of the resulting web pages.&lt;/p&gt;


	&lt;p&gt;Web pages in rails are specified by &lt;code&gt;.rhtml&lt;/code&gt; files that contain a mixture of &lt;span class="caps"&gt;HTML&lt;/span&gt; and ruby code similar to the way Java and &lt;span class="caps"&gt;HTML&lt;/span&gt; are mixed in &lt;code&gt;.jsp&lt;/code&gt; files.  The difference is that &lt;code&gt;.rhtml&lt;/code&gt; files are translated at runtime rather than being compiled into servlets the way &lt;code&gt;.jsp&lt;/code&gt; pages are.  This makes it very easy for the rails environment to generate the &lt;span class="caps"&gt;HTML&lt;/span&gt; for a web page &lt;em&gt;outside&lt;/em&gt; of the web container.  Indeed, the web server does not need to be running.&lt;/p&gt;


	&lt;p&gt;This ease and portability of generating &lt;span class="caps"&gt;HTML&lt;/span&gt; means that the rails test framework merely needs to set up the variables needed by the ruby scriptlets within the &lt;code&gt;.rhtml&lt;/code&gt; files, generate the &lt;span class="caps"&gt;HTML&lt;/span&gt;, and then parse that &lt;span class="caps"&gt;HTML&lt;/span&gt; into a form that the tests can query.&lt;/p&gt;


	&lt;h3&gt;A typical example.&lt;/h3&gt;


The tests query the &lt;span class="caps"&gt;HTML&lt;/span&gt; using an xpath-like syntax coupled with a suite of very powerful assertion functions.  The best way to understand this is to see it.  So here is a simple file named: &lt;code&gt;autocomplete_teacher.rhtml&lt;/code&gt;.  
&lt;pre&gt;&lt;code&gt;&amp;lt;ul class="autocomplete_list"&amp;gt; 
&amp;lt;% @autocompleted_teachers.each do |t| %&amp;gt; 
&amp;lt;li class="autocomplete_item"&amp;gt;&amp;lt;%= "#{create_name_adornment(t)} #{t.last_name}, #{t.first_name}"%&amp;gt;&amp;lt;/li&amp;gt; 
&amp;lt;% end %&amp;gt; 
&amp;lt;/ul&amp;gt; 
&lt;/code&gt;&lt;/pre&gt;
You don&amp;#8217;t have to be a ruby programmer to understand this.  All it is doing is building an &lt;span class="caps"&gt;HTML&lt;/span&gt; list.  The Ruby scriptlet between &lt;code&gt;&amp;lt;% and %&amp;gt;&lt;/code&gt; tokens simple loops for each teacher creating an &lt;code&gt;&amp;lt;li&amp;gt;&lt;/code&gt; tag from an &amp;#8220;adornment&amp;#8221;, and the first and last name.  (The adornment happens to be the database id of the teacher in parentheses.)

A simple test for this &lt;code&gt;.rhtml&lt;/code&gt; file is:
&lt;pre&gt;&lt;code&gt;  def test_autocomplete_teacher_finds_one_in_first_name
    post :autocomplete_teacher, :request=&amp;gt;{:teacher=&amp;gt;"B"}
    assert_template "autocomplete_teacher" 
    assert_response :success
    assert_select "ul.autocomplete_list" do
      assert_select "li.autocomplete_item", :count =&amp;gt; 1
      assert_select "li", "(1) Martin, Bob" 
    end
  end&lt;/code&gt;&lt;/pre&gt;

	&lt;ul&gt;
	&lt;li&gt;The &lt;code&gt;post&lt;/code&gt; statement simply invokes the controller that would normally be invoked by a &lt;span class="caps"&gt;POST&lt;/span&gt; url of the form: &lt;code&gt;POST /teachers/autocomplete_teacher&lt;/code&gt; with the &lt;code&gt;teacher&lt;/code&gt; parameter set to &lt;code&gt;"B"&lt;/code&gt;.&lt;/li&gt;
		&lt;li&gt;The first assertion makes sure that the controller rendered the &lt;code&gt;autocomplete_teacher.rhtml&lt;/code&gt; template.&lt;/li&gt;
		&lt;li&gt;The next makes sure that the controller returned success.&lt;/li&gt;
		&lt;li&gt;the third is a compound assertion that starts by finding the &lt;code&gt;&amp;lt;ul&amp;gt;&lt;/code&gt; tag with a &lt;code&gt;class="autocomplete_list"&lt;/code&gt; attribute.  (Notice the use of &lt;code&gt;css&lt;/code&gt; syntax.)
	&lt;ul&gt;
	&lt;li&gt;Within this tag there should be an &lt;code&gt;&amp;lt;li&amp;gt;&lt;/code&gt; tag with a &lt;code&gt;class="autocomplete_item"&lt;/code&gt; attribute, &lt;/li&gt;
		&lt;li&gt;and containing the text &lt;code&gt;(1) Martin, Bob&lt;/code&gt;.&lt;/li&gt;
	&lt;/ul&gt;&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;&lt;br&gt;
It should not come as any surprise that this test runs in a test environment in which the database has been pre-loaded with very specific data.  For example, this test database always has &amp;#8220;Bob Martin&amp;#8221; being the first row (&lt;code&gt;id=1&lt;/code&gt;) in the &lt;code&gt;Teacher&lt;/code&gt; table.&lt;/p&gt;


	&lt;p&gt;The &lt;code&gt;assert_select&lt;/code&gt; function is &lt;em&gt;very&lt;/em&gt; powerful, and allows you to query large and complex &lt;span class="caps"&gt;HTML&lt;/span&gt; documents with surgical precision.  Although this example give you just a glimpse of that power, you should be able to see that the rails testing scheme allows you to test that all the scriptlets in an &lt;code&gt;.rhtml&lt;/code&gt; file are behaving correctly, and are correctly extracting data from the variables set by the controller.&lt;/p&gt;


	&lt;h3&gt;An example using &lt;em&gt;RSpec&lt;/em&gt; and &lt;em&gt;Behavior Driven Design&lt;/em&gt;.&lt;/h3&gt;


	&lt;p&gt;What follows is a more significant rails example that uses an alternate testing syntax known as Behavior Driven Design (BDD).  The tool that accepts this syntax is called &lt;em&gt;RSpec&lt;/em&gt;.&lt;/p&gt;


Imagine that we have a page that records telephone messages taken from teachers at different schools.  Part of that page might have an .rhtml syntax that looks like this:
&lt;pre&gt;&lt;code&gt;&amp;lt;h1&amp;gt;Message List&amp;lt;/h1&amp;gt;

&amp;lt;table id="list"&amp;gt;
  &amp;lt;tr class="list_header_row"&amp;gt;
    &amp;lt;th class="list_header"&amp;gt;Time&amp;lt;/th&amp;gt;
    &amp;lt;th class="list_header"&amp;gt;Caller&amp;lt;/th&amp;gt;
    &amp;lt;th class="list_header"&amp;gt;School&amp;lt;/th&amp;gt;
    &amp;lt;th class="list_header"&amp;gt;IEP&amp;lt;/th&amp;gt;
  &amp;lt;/tr&amp;gt;
&amp;lt;%time_chooser = TimeChooser.new%&amp;gt; 
&amp;lt;% for message in @messages %&amp;gt;
  &amp;lt;%cell_class = cycle("list_content_even", "list_content_odd")%&amp;gt;
  &amp;lt;tr id="list_content_row"&amp;gt;
    &amp;lt;td id="time"   class="&amp;lt;%=cell_class%&amp;gt;"&amp;gt;&amp;lt;%=h(time_chooser.format_time(message.time)) %&amp;gt;&amp;lt;/td&amp;gt;
    &amp;lt;td id="caller" class="&amp;lt;%=cell_class%&amp;gt;"&amp;gt;&amp;lt;%=h person_name(message.caller) %&amp;gt;&amp;lt;/td&amp;gt;
    &amp;lt;td id="school" class="&amp;lt;%=cell_class%&amp;gt;"&amp;gt;&amp;lt;%=h message.school.name %&amp;gt;&amp;lt;/td&amp;gt;
    &amp;lt;td id="iep"    class="&amp;lt;%=cell_class%&amp;gt;"&amp;gt;&amp;lt;%=h (message.iep ? "X" : "") %&amp;gt;&amp;lt;/td&amp;gt;
  &amp;lt;/tr&amp;gt;
&amp;lt;% end %&amp;gt;
&amp;lt;/table&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
Clearly each message has a time, caller, school, and some kind of boolean field named &amp;#8220;IEP&amp;#8221;.  

We can test this &lt;code&gt;.rhtml&lt;/code&gt; file with the following &lt;em&gt;RSpec&lt;/em&gt; specification:
&lt;pre&gt;&lt;code&gt;context "Given a request to render message/list with one message the page" do
  setup do
    m = mock "message" 
    caller = mock "person",:null_object=&amp;gt;true
    school = mock "school" 

    m.should_receive(:school).and_return(school)
    m.should_receive(:time).and_return(Time.parse("1/1/06"))
    m.should_receive(:caller).any_number_of_times.and_return(caller)
    m.should_receive(:iep).and_return(true)

    caller.should_receive(:first_name).and_return("Bob")
    caller.should_receive(:last_name).and_return("Martin")

    school.should_receive(:name).and_return("Jefferson")
    assigns[:messages]=[m]

    assigns[:message_pages] = mock "message_pages", :null_object=&amp;gt;true
    render 'message/list'
  end

  specify "should show the time" do
    response.should_have_tag :td, :content=&amp;gt;"12:00 AM 1/1", :attributes=&amp;gt;{:id=&amp;gt;"time"}
  end

  specify "should show caller first and last name" do
    response.should_have_tag :td, :content=&amp;gt;"Bob Martin", :attributes=&amp;gt;{:id=&amp;gt;"caller"}
  end

  specify "should show school name" do
    response.should_have_tag :td, :content=&amp;gt;"Jefferson", :attributes=&amp;gt;{:id=&amp;gt;"school"}
  end

  specify "should show the IEP field" do
    response.should_have_tag :td, :content=&amp;gt;"X",:attributes=&amp;gt;{:id=&amp;gt;"iep"}
  end
end
&lt;/code&gt;&lt;/pre&gt;
I&amp;#8217;m not going to explain the &lt;code&gt;setup&lt;/code&gt; function containing all that &lt;em&gt;mock&lt;/em&gt; stuff you see at the start.  Let me just say that the mocking facilities of &lt;em&gt;RSpec&lt;/em&gt; are both powerful and convenient.  Actually you shouldn&amp;#8217;t have too much trouble understanding the &lt;code&gt;setup&lt;/code&gt; if you try; but understanding it is not essential for this example.  The interesting testing is in the &lt;code&gt;specify&lt;/code&gt; blocks.

	&lt;p&gt;You shouldn&amp;#8217;t have too much trouble reading the &lt;code&gt;specify&lt;/code&gt; blocks.  You can understand all of them if you understand the first.  Here is what it does:&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;The first spec ensures that &lt;code&gt;&amp;lt;td id="time"&amp;gt;12:00 AM 1/1&amp;lt;/td&amp;gt;&lt;/code&gt; exists in the &lt;span class="caps"&gt;HTML&lt;/span&gt; document.  This is not a string compare.  Rather it is a semantic equivalence.  Whitespace, and other attributes and complications are ignored.  This spec will pass as long as there is a &lt;code&gt;td&lt;/code&gt; tag with the appropriate id and contents.&lt;/li&gt;
	&lt;/ul&gt;


	&lt;h3&gt;&lt;span class="caps"&gt;HTML&lt;/span&gt; Testing Discipline and Strategy&lt;/h3&gt;


	&lt;p&gt;One of the reasons that &lt;span class="caps"&gt;GUI&lt;/span&gt; testing has been so problematic in the &lt;code&gt;.jsp&lt;/code&gt; world is that the java scriptlets in those files often reach out into the overall application domain and touch code that ties them to the web container and the application server.  For example, if you make a call from a &lt;code&gt;.jsp&lt;/code&gt; page to a database gateway, or an entity bean, or some other structure that is tied to the database; then in order to test the &lt;code&gt;.jsp&lt;/code&gt; you have to have the full enabling context running.  Rails gets away with this because the enabling context is lightweight, portable, and disconnected from the web container, and the live database.  Even so, rails applications are not always as decoupled as they should be.&lt;/p&gt;


	&lt;p&gt;In Rails, Java, or any other web context, the discipline should be to make sure that none of the scriptlets in the &lt;code&gt;.jsp&lt;/code&gt;, &lt;code&gt;.rhtml&lt;/code&gt;, etc. files know anything at all about the rest of the application.  Rather, the controller code should load up data into simple objects and pass them to the scriptlets (typically in the &lt;code&gt;attributes&lt;/code&gt; field of the &lt;code&gt;HttpServletRequest&lt;/code&gt; object or its equivalent).  The scriptlets can fiddle with the format of this data (e.g. data formats, money formats, etc.) but &lt;em&gt;should not do any calculation, querying, or other business rule or database processing.&lt;/em&gt;  Nor should the scriptlets navigate through the model objects or entities.  Rather the controller should do all the navigating, gathering, and calculating and present the data to the scriptlets in a nice little package.&lt;/p&gt;


	&lt;p&gt;If you follow this simple design discipline, then your web pages can be generated completely outside of the web environment, and your tests can parse and inspect the html in a simple and friendly environment.&lt;/p&gt;


	&lt;h3&gt;Conclusion&lt;/h3&gt;


	&lt;p&gt;I&amp;#8217;ll have more to say about &lt;em&gt;RSpec&lt;/em&gt; in a future blog.  &lt;span class="caps"&gt;BDD&lt;/span&gt; is an exciting twist on the syntax of testing, that has an effect far greater than the simple syntax shift would imply.&lt;/p&gt;


	&lt;p&gt;I hope this article has convinced you that the rails community has solved the problem of testing &lt;span class="caps"&gt;HTML&lt;/span&gt; generation.  This solution can be easily extrapolated back to Java and .NET as future blogs in this series will show.&lt;/p&gt;


	&lt;p&gt;Clearly the problem of testing Javascript, and the ever more complex issues of Web2.0 and &lt;span class="caps"&gt;GTK&lt;/span&gt; are not addressed by this scheme.  However, there are solutions for Javascript that we will investigate in future blogs in this series.&lt;/p&gt;


	&lt;p&gt;Finally, this technique does not test the integration and workflow of a whole application.  Again, those are topics for later blogs.&lt;/p&gt;


	&lt;p&gt;I hope this kickoff blog has been informative.  If you have a comment, question, or even a rant, please don&amp;#8217;t hesitate to add a comment to this blog.&lt;/p&gt;</description>
      <pubDate>Sat, 13 Jan 2007 17:24:00 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:6fcd0b8d-2d9f-4d06-b44d-926bb905a097</guid>
      <author>Uncle Bob</author>
      <link>http://blog.objectmentor.com/articles/2007/01/13/testing-guis-part-i-ror</link>
      <category>Uncle Bob's Blatherings</category>
      <category>Testing GUIs</category>
    </item>
    <item>
      <title>"Testing GUIs Part I: RoR." by PDF ? PPT</title>
      <description>&lt;p&gt;&lt;a href="http://www.pdftoppt.ru" rel="nofollow"&gt;PDF ? PPT&lt;/a&gt; PDF to PowerPoint Converter lets you convert PDF to PowerPoint (PPT, PPTX, PPS, PPTM, PPSX, PPSM, POT, etc.), fully supports MS 2010, 2007, 2003.&lt;/p&gt;</description>
      <pubDate>Sun, 29 Jan 2012 19:05:30 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:13916883-83f7-4ea7-a857-e76c200b17f8</guid>
      <link>http://blog.objectmentor.com/articles/2007/01/13/testing-guis-part-i-ror#comment-200126</link>
    </item>
    <item>
      <title>"Testing GUIs Part I: RoR." by shakopee townhomes</title>
      <description>&lt;p&gt;Thanks for the post. It was informative and interesting.&lt;/p&gt;</description>
      <pubDate>Fri, 20 Jan 2012 02:42:15 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:b765d040-0fbd-4c5d-b778-6619f5eeb80d</guid>
      <link>http://blog.objectmentor.com/articles/2007/01/13/testing-guis-part-i-ror#comment-198669</link>
    </item>
    <item>
      <title>"Testing GUIs Part I: RoR." by Wholesale clothing manufacturers</title>
      <description>&lt;p&gt;Nice article, I&amp;#8217;ve bookmarked this one.&lt;/p&gt;</description>
      <pubDate>Thu, 19 Jan 2012 22:04:01 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:0904542f-1900-4014-9e95-51d352b9432b</guid>
      <link>http://blog.objectmentor.com/articles/2007/01/13/testing-guis-part-i-ror#comment-198646</link>
    </item>
    <item>
      <title>"Testing GUIs Part I: RoR." by led displays</title>
      <description>&lt;p&gt;I have to say this is huge work.I have read the whole article and it is really superbly written article.Testing guis part 1 is really an informative article and wanna say we the readers wanna see some more like this.&lt;/p&gt;</description>
      <pubDate>Fri, 13 Jan 2012 00:24:08 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:395565dc-6e2c-4679-a091-1cbc95b9d885</guid>
      <link>http://blog.objectmentor.com/articles/2007/01/13/testing-guis-part-i-ror#comment-197646</link>
    </item>
    <item>
      <title>"Testing GUIs Part I: RoR." by Urdu poetry</title>
      <description>&lt;p&gt;Thanks for sharing these wonderful comic videos with us. They are really funny. Will look after for some more updates.&lt;/p&gt;</description>
      <pubDate>Thu, 29 Dec 2011 01:06:11 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:cc560cb8-15e0-44ec-9859-b6c574c8ac97</guid>
      <link>http://blog.objectmentor.com/articles/2007/01/13/testing-guis-part-i-ror#comment-193114</link>
    </item>
    <item>
      <title>"Testing GUIs Part I: RoR." by dentist in houston</title>
      <description>&lt;p&gt;First I must tell you we appreciate the great and informative entry.Need to admit that I never learned about this review, I noticed many new facts, in my opinion. God bless you for sharing this information useful and interesting and I also will probably anticipate other interesting posts you closer to the inside future.keep.&lt;/p&gt;</description>
      <pubDate>Tue, 27 Dec 2011 09:16:02 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:8be42780-82d3-48a3-99ff-e22f4386eae6</guid>
      <link>http://blog.objectmentor.com/articles/2007/01/13/testing-guis-part-i-ror#comment-192606</link>
    </item>
    <item>
      <title>"Testing GUIs Part I: RoR." by Software Testing Services</title>
      <description>&lt;p&gt;The article very surprised to me! Your writing is good. In this I learned a lot! Thank you! Share with us the good times.
&lt;b&gt;&amp;lt;&lt;a href="http://www.kualitatem.com/" rel="nofollow"&gt;Software Quality Assurance&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;</description>
      <pubDate>Mon, 28 Nov 2011 00:17:44 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:321e36a1-298a-481c-86d7-3515c80ce34a</guid>
      <link>http://blog.objectmentor.com/articles/2007/01/13/testing-guis-part-i-ror#comment-179021</link>
    </item>
    <item>
      <title>"Testing GUIs Part I: RoR." by banyo dekorasyon</title>
      <description>&lt;p&gt;Yes, I plan on discussing the testing of thick client GUIs, &lt;a href="http://www.akinyapi.net/BanyoDekorasyon.html" rel="nofollow"&gt;Banyo Dekorasyon&lt;/a&gt;  and GUIs with lots of JavaScript.&lt;/p&gt;</description>
      <pubDate>Thu, 24 Nov 2011 06:48:34 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:5bafb167-36a4-4113-bf88-2c7835bee858</guid>
      <link>http://blog.objectmentor.com/articles/2007/01/13/testing-guis-part-i-ror#comment-177517</link>
    </item>
    <item>
      <title>"Testing GUIs Part I: RoR." by car rental service delhi</title>
      <description>&lt;p&gt;If only I had found this blog before.&#160;The advice in this post are very helpful and I will certainly read the other posts in this series too.&#160;Thank you for posting this.&lt;/p&gt;</description>
      <pubDate>Thu, 24 Nov 2011 03:59:56 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:5422e7df-1f60-41ff-ba86-9707839547dd</guid>
      <link>http://blog.objectmentor.com/articles/2007/01/13/testing-guis-part-i-ror#comment-177442</link>
    </item>
    <item>
      <title>"Testing GUIs Part I: RoR." by Cheap Beats By Dre</title>
      <description>&lt;p&gt;bus today, make them &lt;a href="http://www.cheap-monsterbeatsbydrdre.co.uk" rel="nofollow"&gt;Cheap Beats By Dre&lt;/a&gt;miserable. One said: &amp;#8220;I ??am really unlucky it! I was packed &lt;a href="http://www.cheap-monsterbeatsbydrdre.co.uk/beats-by-drdre-studio-c-89.html" rel="nofollow"&gt;Beats By Dre Studio&lt;/a&gt;in the car to flow production.&amp;#8221; One said: &amp;#8220;I ??called &lt;a href="http://www.cheap-monsterbeatsbydrdre.co.uk/beats-by-drdre-solo-c-91.html" rel="nofollow"&gt;Beats By Dre Solo&lt;/a&gt;it bad luck! In I was packed car are pregnant.&lt;a href="http://www.cheap-monsterbeatsbydrdre.co.uk/beats-by-drdre-pro-c-90.html" rel="nofollow"&gt;Beats By Dre Pro&lt;/a&gt;
Classic joke: I TVU
A university student&lt;a href="http://www.drdrebeatsheadphones-australia.com" rel="nofollow"&gt;beats by dr dre&lt;/a&gt; caught by the enemy, the enemy tied him at the poles,&lt;a href="http://www.drdrebeatsheadphones-australia.com/justbeats-solo-purple-onear-headphones-with-controltalk-p-234.html" rel="nofollow"&gt;just beats solo headphones purple&lt;/a&gt; and then asked him: say, where are you? You do not say it electrocuted! S&lt;a href="http://www.drdrebeatsheadphones-australia.com/cheap-drdre-beats-studio-limited-edition-headphones-blackyellow-p-185.html" rel="nofollow"&gt;cheap dr.dre beats studio headphones balck/yellow&lt;/a&gt;tudents back to the enemy a word, the result was electrocuted, he said: I am TVU.&lt;a href="http://www.drdrebeatsheadphones-australia.com/cheap-beats-by-drdre-pro-performance-professional-headphones-white-p-192.html" rel="nofollow"&gt;Hot sale beats by dr dre pro  headphones&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Tue, 15 Nov 2011 03:52:02 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:d2d34063-c466-4d7a-a76a-c016cb70ad31</guid>
      <link>http://blog.objectmentor.com/articles/2007/01/13/testing-guis-part-i-ror#comment-173174</link>
    </item>
    <item>
      <title>"Testing GUIs Part I: RoR." by Gate Valve</title>
      <description>&lt;p&gt;Thanks for sharing! please allow me to twitter it.&lt;/p&gt;</description>
      <pubDate>Mon, 07 Nov 2011 21:14:06 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:cea8aee0-300f-44b8-89ce-0798292ca204</guid>
      <link>http://blog.objectmentor.com/articles/2007/01/13/testing-guis-part-i-ror#comment-169544</link>
    </item>
    <item>
      <title>"Testing GUIs Part I: RoR." by Prince Charles</title>
      <description>&lt;p&gt;I simply nominate three words for your article&amp;#8230;Simple, Good, complete.  Your power of writing is very good and you chose a different topic for discussion. Keep it up.&lt;/p&gt;</description>
      <pubDate>Wed, 02 Nov 2011 11:02:24 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:8669609b-d7f3-47e2-94d5-dcb3212a0f13</guid>
      <link>http://blog.objectmentor.com/articles/2007/01/13/testing-guis-part-i-ror#comment-166755</link>
    </item>
    <item>
      <title>"Testing GUIs Part I: RoR." by Personal Blog</title>
      <description>&lt;p&gt;Well, your post shows how much time you take to do this and efforts to furnish this. I really impressed by your writing skills. Thanks to share this good piece of writing.&lt;/p&gt;</description>
      <pubDate>Tue, 01 Nov 2011 08:23:46 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:3a13e339-6435-47a5-82ce-c49a7c3e3553</guid>
      <link>http://blog.objectmentor.com/articles/2007/01/13/testing-guis-part-i-ror#comment-166723</link>
    </item>
    <item>
      <title>"Testing GUIs Part I: RoR." by Danny's Collection</title>
      <description>&lt;p&gt;Nice style and absolutely different. I always prefer to read good information and your article is a example of this. This is very useful information. Thanks to share with us. I will check your site regularly.&lt;/p&gt;</description>
      <pubDate>Sun, 30 Oct 2011 09:58:52 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:6b2ce6ac-ce92-4961-8c8c-834eb0dafd96</guid>
      <link>http://blog.objectmentor.com/articles/2007/01/13/testing-guis-part-i-ror#comment-165759</link>
    </item>
    <item>
      <title>"Testing GUIs Part I: RoR." by Free Online Articles Directory</title>
      <description>&lt;p&gt;It is your right to get a lot of comment on this post. You have done very hard work with heart. I really appreciate your efforts. I will check your site on regular bases. 
&lt;a href="http://www.jojoarticles.com/" rel="nofollow"&gt;Free Online Articles Directory&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Fri, 28 Oct 2011 08:39:35 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:92277d58-4ea6-4860-a040-758760c054c6</guid>
      <link>http://blog.objectmentor.com/articles/2007/01/13/testing-guis-part-i-ror#comment-165170</link>
    </item>
    <item>
      <title>"Testing GUIs Part I: RoR." by Official Tips</title>
      <description>&lt;p&gt;I don&#8217;t understand what words I choose for you this precious post. It is look like a nice piece of article writing. It is such an amazing post. Thanks to share this.&lt;/p&gt;</description>
      <pubDate>Tue, 25 Oct 2011 10:31:02 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:c0e49103-a793-4527-9c3c-0d4a17368c74</guid>
      <link>http://blog.objectmentor.com/articles/2007/01/13/testing-guis-part-i-ror#comment-163272</link>
    </item>
    <item>
      <title>"Testing GUIs Part I: RoR." by Brent Nicholson</title>
      <description>&lt;p&gt;Art of writing is God gifted and u can prove it in this post. Sensible and mature post, writes in a good style. I will check your site on a regular basis.&lt;/p&gt;</description>
      <pubDate>Mon, 24 Oct 2011 13:34:45 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:af0427b3-6cfe-47ae-a6ae-4a1b44fbe1a9</guid>
      <link>http://blog.objectmentor.com/articles/2007/01/13/testing-guis-part-i-ror#comment-162710</link>
    </item>
    <item>
      <title>"Testing GUIs Part I: RoR." by Federal Consolidation Loan</title>
      <description>&lt;p&gt;Wow&#8230; easy to stand and well defined post. You wrote in awesome style and not go out from topic. Your writing style is totally new for me. I will bookmark your site.&lt;/p&gt;</description>
      <pubDate>Sat, 22 Oct 2011 14:11:25 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:84fd2edb-f7d0-4474-86bc-6ae0a4371b9e</guid>
      <link>http://blog.objectmentor.com/articles/2007/01/13/testing-guis-part-i-ror#comment-160917</link>
    </item>
    <item>
      <title>"Testing GUIs Part I: RoR." by http://www.tiffanyandcooutlet.eu/tiffany and co</title>
      <description>&lt;p&gt;She is young and unknown and a great dancer.&lt;/p&gt;</description>
      <pubDate>Fri, 21 Oct 2011 12:35:56 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:c28a702d-53b8-46a3-9405-9884d8fdf1dd</guid>
      <link>http://blog.objectmentor.com/articles/2007/01/13/testing-guis-part-i-ror#comment-160847</link>
    </item>
    <item>
      <title>"Testing GUIs Part I: RoR." by William Joseph </title>
      <description>&lt;p&gt;Your article took my several minute but it is not going waste. Your style of writing is marvelous. You have Conway your point in a very well way. Thanks for this 
&lt;a href="http://www.wageaverage.com/" rel="nofollow"&gt;http://www.wageaverage.com/&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Wed, 19 Oct 2011 06:48:29 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:1d5cbdd0-8ba4-4341-bbd9-161b26965d1d</guid>
      <link>http://blog.objectmentor.com/articles/2007/01/13/testing-guis-part-i-ror#comment-159751</link>
    </item>
    <item>
      <title>"Testing GUIs Part I: RoR." by jurujrej</title>
      <description>&lt;p&gt;And for all its status, you&#8217;ll discover quite a lot including a good&lt;/p&gt;


	&lt;p&gt;deal of people who would alternatively freeze within the chilly than set&lt;/p&gt;


	&lt;p&gt;on &lt;a href="http://www.shopsellbags.com" rel="nofollow"&gt;&lt;strong&gt;New  chanel handbags for sale&lt;/strong&gt;&lt;/a&gt;. Some people state that these clients who&#8217;re&lt;/p&gt;


	&lt;p&gt;nuts ample to set on this layout of boot wind up attempting to get like&lt;/p&gt;


	&lt;p&gt;elves. So, it does not matter the kind of neighborhood weather&lt;/p&gt;


	&lt;p&gt;conditions zone exactly where you reside, for all those who these as&lt;/p&gt;


	&lt;p&gt;being the seem of &lt;a href="http://www.shopsellbags.com" rel="nofollow"&gt;&lt;strong&gt;New  chanel handbags for sale&lt;/strong&gt;&lt;/a&gt;, go beforehand and get a pair.&lt;/p&gt;


	&lt;p&gt;Likewise by about to between the extremely some webpage shops that&lt;/p&gt;


	&lt;p&gt;presently perform these boots on their site at an affordable value. They&lt;/p&gt;


	&lt;p&gt;&#8217;ll normally inform you whether the boots growing to be bought is&lt;/p&gt;


	&lt;p&gt;genuine or an imitation.&lt;/p&gt;</description>
      <pubDate>Wed, 19 Oct 2011 02:15:00 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:9843786a-8069-48e8-9978-1e1d192faf8a</guid>
      <link>http://blog.objectmentor.com/articles/2007/01/13/testing-guis-part-i-ror#comment-159371</link>
    </item>
    <item>
      <title>"Testing GUIs Part I: RoR." by rfjruey</title>
      <description>&lt;p&gt;And for all its status, you&#8217;ll discover quite a lot including a good&lt;/p&gt;


	&lt;p&gt;deal of people who would alternatively freeze within the chilly than set&lt;/p&gt;


	&lt;p&gt;on &lt;a href="http://www.shopsellbags.com" rel="nofollow"&gt;&lt;strong&gt;New  chanel handbags for sale&lt;/strong&gt;&lt;/a&gt;. Some people state that these clients who&#8217;re&lt;/p&gt;


	&lt;p&gt;nuts ample to set on this layout of boot wind up attempting to get like&lt;/p&gt;


	&lt;p&gt;elves. So, it does not matter the kind of neighborhood weather&lt;/p&gt;


	&lt;p&gt;conditions zone exactly where you reside, for all those who these as&lt;/p&gt;


	&lt;p&gt;being the seem of &lt;a href="http://www.shopsellbags.com" rel="nofollow"&gt;&lt;strong&gt;New  chanel handbags for sale&lt;/strong&gt;&lt;/a&gt;, go beforehand and get a pair.&lt;/p&gt;


	&lt;p&gt;Likewise by about to between the extremely some webpage shops that&lt;/p&gt;


	&lt;p&gt;presently perform these boots on their site at an affordable value. They&lt;/p&gt;


	&lt;p&gt;&#8217;ll normally inform you whether the boots growing to be bought is&lt;/p&gt;


	&lt;p&gt;genuine or an imitation.&lt;/p&gt;</description>
      <pubDate>Wed, 19 Oct 2011 02:10:53 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:7fc5ea0b-ab26-4885-9666-86863ba4b33f</guid>
      <link>http://blog.objectmentor.com/articles/2007/01/13/testing-guis-part-i-ror#comment-159363</link>
    </item>
    <item>
      <title>"Testing GUIs Part I: RoR." by John Smith</title>
      <description>&lt;p&gt;Every time I visit your page. I gain something new, which is unique and precious for me. I always prefer to read such types of post. Which contain full of information and look like genuine? And you always write such types of post. Thanks a lot for this interesting post.&lt;/p&gt;


	&lt;p&gt;&lt;a href="http://www.freebrochuretemplatess.com/" rel="nofollow"&gt;Free Brochure Templates&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Tue, 18 Oct 2011 08:28:35 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:5c9336f6-07b7-4d6f-bf93-a45f379fe83f</guid>
      <link>http://blog.objectmentor.com/articles/2007/01/13/testing-guis-part-i-ror#comment-159075</link>
    </item>
    <item>
      <title>"Testing GUIs Part I: RoR." by Ashley Bowling</title>
      <description>&lt;p&gt;In the early days, perhaps the most noticeable, widespread change in business software was the Word Processor.&lt;/p&gt;</description>
      <pubDate>Sun, 16 Oct 2011 05:32:46 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:4e4d1e19-0ac3-4de1-bfa0-6ab6b23113c7</guid>
      <link>http://blog.objectmentor.com/articles/2007/01/13/testing-guis-part-i-ror#comment-157357</link>
    </item>
    <item>
      <title>"Testing GUIs Part I: RoR." by Sophie Kinsella</title>
      <description>&lt;p&gt;Your style to define your point is very soft and comprehensible. I really like this. Hope I will get more post like this in future&#8230;Thanks for this.
&lt;a href="http://www.associateresume.org/" rel="nofollow"&gt;Associate Resume Samples&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Fri, 14 Oct 2011 12:06:54 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:37abca9a-139f-42bf-b189-270692dc5cce</guid>
      <link>http://blog.objectmentor.com/articles/2007/01/13/testing-guis-part-i-ror#comment-156562</link>
    </item>
  </channel>
</rss>

