<?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: Unit Testing C and C++ ... with Ruby and RSpec!</title>
    <link>http://blog.objectmentor.com/articles/2008/02/04/unit-testing-c-and-c-with-ruby-and-rspec</link>
    <language>en-us</language>
    <ttl>40</ttl>
    <description></description>
    <item>
      <title>Unit Testing C and C++ ... with Ruby and RSpec!</title>
      <description>&lt;p&gt;If you&amp;#8217;re writing C/C&amp;#043;&amp;#043; code, it&amp;#8217;s natural to write your unit tests in the same language (or use C&amp;#043;&amp;#043; for your C test code). All the well-known unit testing tools take this approach.&lt;/p&gt;


	&lt;p&gt;I think we can agree that neither language offers the best developer productivity among all the language choices out there. Most of us use either language because of perceived performance requirements, institutional and industry tradition, &lt;em&gt;etc.&lt;/em&gt;&lt;/p&gt;


	&lt;p&gt;There&amp;#8217;s growing interest, however, in mixing languages, tools, and &lt;em&gt;paradigms&lt;/em&gt; to get the best tool for a particular job. &amp;lt;shameless-plug&amp;gt;I&amp;#8217;m giving a talk March 7&lt;sup&gt;th&lt;/sup&gt; at &lt;a href="https://www.cmpevents.com/SDw8/a.asp?option=C&amp;#38;V=11&amp;#38;SessID=6102"&gt;SD West&lt;/a&gt; on this very topic, called &lt;a href="https://www.cmpevents.com/SDw8/a.asp?option=C&amp;#38;V=11&amp;#38;SessID=6102"&gt;Polyglot and Poly-Paradigm Programming&lt;/a&gt; &amp;lt;/shameless-plug&amp;gt;.&lt;/p&gt;


	&lt;p&gt;So, why not use a more productive language for your C or C&amp;#043;&amp;#043; unit tests? You have more freedom in your development chores than what&amp;#8217;s required for production. Why not use Ruby&amp;#8217;s &lt;a href="http://rspec.info/"&gt;RSpec&lt;/a&gt;, a &lt;a href="http://behaviour-driven.org/"&gt;Behavior-Driven Development&lt;/a&gt; tool for acceptance and unit testing? Or, you could use Ruby&amp;#8217;s version of &lt;a href="http://www.junit.org"&gt;JUnit&lt;/a&gt;, called &lt;a href="http://ruby-doc.org/stdlib/libdoc/test/unit/rdoc/classes/Test/Unit.html"&gt;Test::Unit&lt;/a&gt;. The hard part is integrating Ruby and C/C&amp;#043;&amp;#043;. If you&amp;#8217;ve been looking for an excuse to bring Ruby (or Tcl or Python or Java or&amp;#8230;) into your C/C&amp;#043;&amp;#043; environment, starting with development tasks is usually the path of least resistance.&lt;/p&gt;


	&lt;p&gt;I did some experimenting over the last few days to integrate &lt;a href="http://rspec.info/"&gt;RSpec&lt;/a&gt;  using &lt;a href="http://www.swig.org"&gt;&lt;span class="caps"&gt;SWIG&lt;/span&gt;&lt;/a&gt; (Simplified Wrapper and Interface Generator), a tool for bridging libraries written in C and C&amp;#043;&amp;#043; to other languages, like Ruby. The &lt;a href="http://www.swig.org/Doc1.3/Ruby.html"&gt;Ruby section&lt;/a&gt; of the &lt;span class="caps"&gt;SWIG&lt;/span&gt; manual was very helpful.&lt;/p&gt;


	&lt;h2&gt;My Proof-of-Concept Code&lt;/h2&gt;


	&lt;p&gt;Here is a zip file of my experiment: &lt;a href="http://blog.objectmentor.com/files/rspec_for_cpp.zip" title="rspec_for_cpp.zip"&gt;rspec_for_cpp.zip&lt;/a&gt;&lt;/p&gt;


	&lt;p&gt;This is far from a complete and working solution, but I think it shows promise. See the &lt;strong&gt;Current Limitations&lt;/strong&gt; section below for details.&lt;/p&gt;


	&lt;p&gt;Unzip the file into a directory. I&amp;#8217;ll assume you named it &lt;code&gt;rspec_for_cpp&lt;/code&gt;. You need to have &lt;code&gt;gmake&lt;/code&gt;, &lt;code&gt;gcc&lt;/code&gt;, &lt;span class="caps"&gt;SWIG&lt;/span&gt; and Ruby installed, along with the RSpec &amp;#8220;gem&amp;#8221;. Right now, it only builds on &lt;span class="caps"&gt;OS X&lt;/span&gt; and Linux (at least the configurations on my machines running those OS&amp;#8217;s &amp;#8211; see the discussion below). To run the build, use the following commands:&lt;/p&gt;


&lt;pre&gt;
    &lt;code&gt;
        $ cd rspec_for_cpp/cpp
        $ make 
    &lt;/code&gt;
&lt;/pre&gt;

	&lt;p&gt;You should see it finish with the lines&lt;/p&gt;


&lt;pre&gt;
    &lt;code&gt;
        ( cd ../spec; spec *_spec.rb )
        .........

        Finished in 0.0***** seconds

        9 examples, 0 failures
    &lt;/code&gt;
&lt;/pre&gt;

	&lt;p&gt;Congratulations, you&amp;#8217;ve just tested some C and C&amp;#043;&amp;#043; code with RSpec! (Or, if you didn&amp;#8217;t succeed, see the notes in the &lt;code&gt;Makefile&lt;/code&gt; and the discussion below.)&lt;/p&gt;


	&lt;h2&gt;The Details&lt;/h2&gt;


	&lt;p&gt;I&amp;#8217;ll briefly walk you through the files in the zip and the key steps required to make it all work.&lt;/p&gt;


	&lt;h3&gt;&lt;code&gt;cexample.h&lt;/code&gt;&lt;/h3&gt;


	&lt;p&gt;Here is a simple C header file.&lt;/p&gt;


&lt;pre&gt;
    &lt;code&gt;
        /* cexample.h */
        #ifndef CEXAMPLE_H
        #define CEXAMPLE_H
        #ifdef __cplusplus
         extern "C" {
        #endif
        char* returnString(char* input);
        double returnDouble(int input);
        void  doNothing();

        #ifdef __cplusplus
         }
        #endif
        #endif
    &lt;/code&gt;
&lt;/pre&gt;

	&lt;p&gt;Of course, in a pure C shop, you won&amp;#8217;t need the &lt;code&gt;#ifdef __cplusplus&lt;/code&gt; stuff. I found this was essential in my experiment when I mixed C and C&amp;#043;&amp;#043;, as you might expect.&lt;/p&gt;


	&lt;h3&gt;&lt;code&gt;cpp/cexample.c&lt;/code&gt;&lt;/h3&gt;


	&lt;p&gt;Here is the corresponding C source file.&lt;/p&gt;


&lt;pre&gt;
    &lt;code&gt;
        /* cexample.h */

        char* returnString(char* input) {
            return input;
        }

        double returnDouble(int input) {
            return (double) input;
        }

        void  doNothing() {}
    &lt;/code&gt;
&lt;/pre&gt;

	&lt;h3&gt;&lt;code&gt;cpp/CppExample.h&lt;/code&gt;&lt;/h3&gt;


	&lt;p&gt;Here is a C&amp;#043;&amp;#043; header file.&lt;/p&gt;


&lt;pre&gt;
    &lt;code&gt;
        #ifndef CPPEXAMPLE_H
        #define CPPEXAMPLE_H

        #include &amp;lt;string&amp;gt;

        class CppExample 
        {
        public:
            CppExample();
            CppExample(const CppExample&amp;#38; foo);
            CppExample(const char* title, int flag);
            virtual ~CppExample();

            const char* title() const;
            void        title(const char* title);
            int         flag() const;
            void        flag(int value);

            static int countOfCppExamples();
        private:
            std::string _title;
            int         _flag;
        };

        #endif
    &lt;/code&gt;
&lt;/pre&gt;

	&lt;h3&gt;&lt;code&gt;cpp/CppExample.cpp&lt;/code&gt;&lt;/h3&gt;


	&lt;p&gt;Here is the corresponding C&amp;#043;&amp;#043; source file.&lt;/p&gt;


&lt;pre&gt;
    &lt;code&gt;
        #include "CppExample.h" 

        CppExample::CppExample() : _title("") {}
        CppExample::CppExample(const CppExample&amp;#38; foo): _title(foo._title) {}
        CppExample::CppExample(const char* title, int flag) : _title(title), _flag(flag) {}
        CppExample::~CppExample() {}

        const char* CppExample::title() const { return _title.c_str(); }
        void        CppExample::title(const char* name) { _title = name; }

        int  CppExample::flag() const { return _flag; }
        void CppExample::flag(int value) { _flag = value; }

        int CppExample::countOfCppExamples() { return 1; }
    &lt;/code&gt;
&lt;/pre&gt;

	&lt;h3&gt;&lt;code&gt;cpp/example.i&lt;/code&gt;&lt;/h3&gt;


	&lt;p&gt;Typically in &lt;span class="caps"&gt;SWIG&lt;/span&gt;, you specify a &lt;code&gt;.i&lt;/code&gt; file to the &lt;code&gt;swig&lt;/code&gt; command to define the &lt;em&gt;module&lt;/em&gt; that wraps the classes and global functions, which classes and functions to expose to the target language (usually all in our case), and other assorted customization options, which are discussed in the &lt;a href="http://www.swig.org/Doc1.3"&gt;&lt;span class="caps"&gt;SWIG&lt;/span&gt; manual&lt;/a&gt;. I&amp;#8217;ll show the &lt;code&gt;swig&lt;/code&gt; command in a minute. For now, note that I&amp;#8217;m going to generate an &lt;code&gt;example_wrap.cpp&lt;/code&gt; file that will function as the bridge between the languages.&lt;/p&gt;


	&lt;p&gt;Here&amp;#8217;s my &lt;code&gt;example.i&lt;/code&gt;, where I named the module &lt;code&gt;example&lt;/code&gt;.&lt;/p&gt;


&lt;pre&gt;
    &lt;code&gt;
        %module example
        %{
            #include "cexample.h" 
            #include "CppExample.h"    
        %}
        %include "cexample.h" 
        %include "CppExample.h" 
    &lt;/code&gt;
&lt;/pre&gt;

	&lt;p&gt;It looks odd to have header files appear twice. The code inside the &lt;code&gt;%{...%}&lt;/code&gt; (with a &amp;#8217;#&amp;#8217; before each &lt;code&gt;include&lt;/code&gt;) are standard C and C&amp;#043;&amp;#043; statements, &lt;em&gt;etc.&lt;/em&gt; that will be inserted verbatim into the generated &amp;#8220;wrapper&amp;#8221; file, &lt;code&gt;example_wrap.cpp&lt;/code&gt;, so that file will compile when it references anything declared in the header files. The second case, with a &amp;#8217;%&amp;#8217; before the &lt;code&gt;include&lt;/code&gt; statements&lt;sup&gt;&lt;a href="#fn1"&gt;1&lt;/a&gt;&lt;/sup&gt;, tells &lt;span class="caps"&gt;SWIG&lt;/span&gt; to make all the declarations in those header files available to the target language. (You can be more selective, if you prefer&amp;#8230;)&lt;/p&gt;


	&lt;p&gt;Following Ruby conventions, the Ruby plugin for &lt;span class="caps"&gt;SWIG&lt;/span&gt; automatically names the module with an upper case first letter (&lt;code&gt;Example&lt;/code&gt;), but you use &lt;code&gt;require 'example'&lt;/code&gt; to include it, as we&amp;#8217;ll see shortly.&lt;/p&gt;


	&lt;h3&gt;Building&lt;/h3&gt;


	&lt;p&gt;See the &lt;code&gt;cpp/Makefile&lt;/code&gt; for the gory details. In a nutshell, you run the &lt;code&gt;swig&lt;/code&gt; command like this.&lt;/p&gt;


&lt;pre&gt;
    &lt;code&gt;
        swig -c++ -ruby -Wall -o example_wrap.cpp example.i
    &lt;/code&gt;
&lt;/pre&gt;

	&lt;p&gt;Next, you create a dynamically-linked library, as appropriate for your platform, so the Ruby interpreter can load the module dynamically when required. The &lt;code&gt;Makefile&lt;/code&gt; can do this for Linux and &lt;span class="caps"&gt;OS X&lt;/span&gt; platforms. See the &lt;a href="http://www.swig.org/Doc1.3/Ruby.html"&gt;Ruby section&lt;/a&gt; of the &lt;span class="caps"&gt;SWIG&lt;/span&gt; manual for Windows specifics.&lt;/p&gt;


	&lt;p&gt;If you test-drive your code, which tends to drive you towards minimally-coupled &amp;#8220;modules&amp;#8221;, then you can keep your libraries and build times small, which will make the build and test cycle very fast!&lt;/p&gt;


	&lt;h3&gt;&lt;code&gt;spec/cexample_spec.rb&lt;/code&gt; and &lt;code&gt;spec/cppexample_spec.rb&lt;/code&gt;&lt;/h3&gt;


	&lt;p&gt;Finally, here are the RSpec files that exercise the C and C&amp;#043;&amp;#043; code. (Disclaimer: these aren&amp;#8217;t the best spec files I&amp;#8217;ve ever written. For one thing, they don&amp;#8217;t exercise all the &lt;code&gt;CppExample&lt;/code&gt; methods! So sue me&amp;#8230; :)&lt;/p&gt;


&lt;pre&gt;
    &lt;code&gt;
        require File.dirname(__FILE__) + '/spec_helper'
        require 'example'

        describe "Example (C functions)" do
          it "should be a constant on Module" do
            Module.constants.should include('Example')
          end
          it "should have the methods defined in the C header file" do
            Example.methods.should include('returnString')
            Example.methods.should include('returnDouble')
            Example.methods.should include('doNothing')
          end
        end

        describe Example, ".returnString" do
          it "should return the input char * string as a Ruby string unchanged" do
            Example.returnString("bar!").should == "bar!" 
          end  
        end

        describe Example, ".returnDouble" do
          it "should return the input integer as a double" do
            Example.returnDouble(10).should == 10.0
          end
        end

        describe Example, ".doNothing" do
          it "should exist, but do nothing" do
            lambda { Example.doNothing }.should_not raise_error
          end
        end
    &lt;/code&gt;
&lt;/pre&gt;

	&lt;p&gt;and&lt;/p&gt;


&lt;pre&gt;
    &lt;code&gt;
    require File.dirname(__FILE__) + '/spec_helper'
    require 'example'

    describe Example::CppExample do
      it "should be a constant on module Example" do
        Example.constants.should include('CppExample')
      end
    end

    describe Example::CppExample, ".new" do
      it "should create a new object of type CppExample" do
        example = Example::CppExample.new("example1", 1)
        example.title.should == "example1" 
        example.flag.should  == 1
      end
    end

    describe Example::CppExample, "#title(value)" do
      it "should set the title" do
        example = Example::CppExample.new("example1", 1)
        example.title("title2")
        example.title.should == "title2" 
      end
    end

    describe Example::CppExample, "#flag(value)" do
      it "should set the flag" do
        example = Example::CppExample.new("example1", 1)
        example.flag(2)
        example.flag.should == 2
      end
    end
    &lt;/code&gt;
&lt;/pre&gt;

	&lt;p&gt;If you love RSpec like I do, this is a very compelling thing to see!&lt;/p&gt;


	&lt;p&gt;And now for the small print:&lt;/p&gt;


	&lt;h2&gt;Current Limitations&lt;/h2&gt;


	&lt;p&gt;As I said, this is just an experiment at this point. Volunteers to make this &lt;em&gt;battle-ready&lt;/em&gt; would be most welcome!&lt;/p&gt;


	&lt;h3&gt;General&lt;/h3&gt;


	&lt;h4&gt;The Example &lt;code&gt;Makefile&lt;/code&gt; File&lt;/h4&gt;


	&lt;p&gt;&lt;strong&gt;It Must Be Hand Edited for Each New or Renamed Source File&lt;/strong&gt;&lt;/p&gt;


	&lt;p&gt;You&amp;#8217;ve probably already solved this problem for your own make files. Just merge in the example &lt;code&gt;Makefile&lt;/code&gt; to pick up the &lt;span class="caps"&gt;SWIG&lt;/span&gt;- and RSpec-related targets and rules.&lt;/p&gt;


	&lt;p&gt;&lt;strong&gt;It Only Knows How to Build Shared Libraries for Mac &lt;span class="caps"&gt;OS X&lt;/span&gt; and Linux (and Not Very Well)&lt;/strong&gt;&lt;/p&gt;


	&lt;p&gt;Some definitions are probably unique to my &lt;span class="caps"&gt;OS X&lt;/span&gt; and Linux machines. Windows is not supported at all. However, this is also easy rectify. Start with the notes in the &lt;code&gt;Makefile&lt;/code&gt; itself.&lt;/p&gt;


	&lt;h4&gt;The &lt;code&gt;module.i&lt;/code&gt; File Must Be Hand Edited for Each File Change&lt;/h4&gt;


	&lt;p&gt;Since the format is simple, a make task could fill a template file with the changed list of source files during the build.&lt;/p&gt;


	&lt;h4&gt;Better Automation&lt;/h4&gt;


	&lt;p&gt;It should be straightforward to provide scripts, &lt;span class="caps"&gt;IDE&lt;/span&gt;/Editor shortcuts, &lt;em&gt;etc&lt;/em&gt;. that automate some of the tasks of adding new methods and classes to your C and C&amp;#043;&amp;#043; code when you introduce them  &lt;i&gt;first&lt;/i&gt; in your &amp;#8220;spec&amp;#8221; files. (The true &lt;span class="caps"&gt;TDD&lt;/span&gt; way, of course.)&lt;/p&gt;


	&lt;h3&gt;Specific Issues for C Code Testing&lt;/h3&gt;


	&lt;p&gt;I don&amp;#8217;t know of any other C-specific issues, so unit testing with Ruby is most viable today for C code. Although I haven&amp;#8217;t experimented extensively, C functions and variables are easily mapped by &lt;span class="caps"&gt;SWIG&lt;/span&gt; to a Ruby module. The &lt;a href="http://www.swig.org/Doc1.3/Ruby.html"&gt;Ruby section&lt;/a&gt; of the &lt;span class="caps"&gt;SWIG&lt;/span&gt; manual discusses this mapping in some detail.&lt;/p&gt;


	&lt;h3&gt;Specific Issues for C&amp;#043;&amp;#043; Code Testing&lt;/h3&gt;


	&lt;p&gt;More work will be required to make this viable. It&amp;#8217;s important to note that &lt;span class="caps"&gt;SWIG&lt;/span&gt; cannot handle all C&amp;#043;&amp;#043; constructs (although there are workarounds for most issues, if you&amp;#8217;re committed to this approach&amp;#8230;). For example, namespaces, nested classes, some template and some method overloading scenarios are not supported. The &lt;a href="http://www.swig.org/Doc1.3"&gt;&lt;span class="caps"&gt;SWIG&lt;/span&gt; manual&lt;/a&gt; has details.&lt;/p&gt;


	&lt;p&gt;Also, during my experiment, &lt;span class="caps"&gt;SWIG&lt;/span&gt; didn&amp;#8217;t seem to map &lt;code&gt;const std::string&amp;#38;&lt;/code&gt; objects in C&amp;#043;&amp;#043; method signatures to Ruby strings, as I would have expected (&lt;code&gt;char*&lt;/code&gt; worked fine).&lt;/p&gt;


	&lt;h2&gt;Is It a Viable Approach?&lt;/h2&gt;


	&lt;p&gt;Once the &lt;strong&gt;General&lt;/strong&gt; issues listed above are handled, I think this approach would work very well for C code. For C&amp;#043;&amp;#043; code, there are more issues that need to be addressed, and programmers who are committed to this strategy will need to tolerate some issues (or just use C&amp;#043;&amp;#043;-language tools for some scenarios).&lt;/p&gt;


	&lt;h2&gt;Conclusions: Making It Development-Team Ready&lt;/h2&gt;


	&lt;p&gt;I&amp;#8217;d like to see this approach pushed to its logical limit. I think it has the potential to really improve the productivity of C and C&amp;#043;&amp;#043; developers and the quality of their test coverage, by leveraging the productivity and power of dynamically-typed languages like Ruby. If you prefer, you could use Tcl, Python, even Java instead.&lt;/p&gt;


	&lt;h3&gt;License&lt;/h3&gt;


	&lt;p&gt;This code is complete open and free to use. Of course, use it at your own risk; I offer it without warranty, &lt;em&gt;etc.&lt;/em&gt;, &lt;em&gt;etc&lt;/em&gt;. When I polish it to the point of making it an &amp;#8220;official&amp;#8221; project, I will probably release under the Apache license.&lt;/p&gt;


	&lt;p id="fn1"&gt;&lt;sup&gt;1&lt;/sup&gt; I spent a lot of time debugging problems because I had a &amp;#8217;#&amp;#8217; where I should have had a &amp;#8217;%&amp;#8217;! &lt;em&gt;Caveat emptor&lt;/em&gt;!&lt;/p&gt;</description>
      <pubDate>Mon, 04 Feb 2008 22:08:00 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:cba4dc23-cbce-4173-be6f-14c7847dcfea</guid>
      <author>Dean Wampler</author>
      <link>http://blog.objectmentor.com/articles/2008/02/04/unit-testing-c-and-c-with-ruby-and-rspec</link>
      <category>Embedded</category>
      <category>Dean's Deprecations</category>
      <category>Dynamic Languages</category>
      <category>Agile Methods</category>
      <category>c</category>
      <category>RSpec</category>
      <category>Ruby</category>
      <category>TDD</category>
      <category>testing</category>
    </item>
    <item>
      <title>"Unit Testing C and C++ ... with Ruby and RSpec!" by Singles</title>
      <description>&lt;p&gt;great site, kudos&lt;/p&gt;</description>
      <pubDate>Sun, 29 Jan 2012 11:38:55 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:9bd2290f-cc49-4370-8e6f-f3089a851ea2</guid>
      <link>http://blog.objectmentor.com/articles/2008/02/04/unit-testing-c-and-c-with-ruby-and-rspec#comment-200094</link>
    </item>
    <item>
      <title>"Unit Testing C and C++ ... with Ruby and RSpec!" by san antonio dental</title>
      <description>&lt;p&gt;I have to say this post was certainly informative and contains useful content for enthusiastic visitors. I will definitely bookmark this blog for future reference and further viewing. Thanks a bunch for sharing this with us!&lt;/p&gt;</description>
      <pubDate>Sat, 24 Dec 2011 01:01:19 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:618ad176-5cec-4ea2-8003-c958677512d2</guid>
      <link>http://blog.objectmentor.com/articles/2008/02/04/unit-testing-c-and-c-with-ruby-and-rspec#comment-191125</link>
    </item>
    <item>
      <title>"Unit Testing C and C++ ... with Ruby and RSpec!" by Breguet watches</title>
      <description>&lt;p&gt;at the card&lt;/p&gt;</description>
      <pubDate>Fri, 23 Dec 2011 21:20:24 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:b258ba6e-2e85-433a-9992-f742955c21bd</guid>
      <link>http://blog.objectmentor.com/articles/2008/02/04/unit-testing-c-and-c-with-ruby-and-rspec#comment-190982</link>
    </item>
    <item>
      <title>"Unit Testing C and C++ ... with Ruby and RSpec!" by music production</title>
      <description>&lt;p&gt;I am totally agreed with the commenter above me. It&#8217;s really unbelievable.&lt;/p&gt;</description>
      <pubDate>Wed, 07 Dec 2011 12:21:44 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:a6b64842-9aef-4fc9-a2da-9f5e24154829</guid>
      <link>http://blog.objectmentor.com/articles/2008/02/04/unit-testing-c-and-c-with-ruby-and-rspec#comment-184250</link>
    </item>
    <item>
      <title>"Unit Testing C and C++ ... with Ruby and RSpec!" by hp storage servers</title>
      <description>&lt;p&gt;really nice one good article&lt;/p&gt;</description>
      <pubDate>Wed, 16 Nov 2011 03:09:36 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:c32a1e93-3557-47bf-96fe-50e169545ff1</guid>
      <link>http://blog.objectmentor.com/articles/2008/02/04/unit-testing-c-and-c-with-ruby-and-rspec#comment-174189</link>
    </item>
    <item>
      <title>"Unit Testing C and C++ ... with Ruby and RSpec!" by Dr Dre beats Headphones Canada</title>
      <description>&lt;p&gt;As used on the head headphones, so people not necessarily seeing the way the case for basic procedures,&lt;/p&gt;</description>
      <pubDate>Sat, 12 Nov 2011 02:20:34 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:9fc52445-15bb-4963-be00-03c0cb979bf3</guid>
      <link>http://blog.objectmentor.com/articles/2008/02/04/unit-testing-c-and-c-with-ruby-and-rspec#comment-171803</link>
    </item>
    <item>
      <title>"Unit Testing C and C++ ... with Ruby and RSpec!" by Beats By Dre Canada</title>
      <description>&lt;p&gt;in describing the evaluation of our Studio before it is necessary to talk about this wire to the ascension of the sound quality.&lt;/p&gt;</description>
      <pubDate>Tue, 08 Nov 2011 20:03:40 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:d6876049-73ea-461a-8737-868e06fa43c6</guid>
      <link>http://blog.objectmentor.com/articles/2008/02/04/unit-testing-c-and-c-with-ruby-and-rspec#comment-170097</link>
    </item>
    <item>
      <title>"Unit Testing C and C++ ... with Ruby and RSpec!" by christian louboutin</title>
      <description>&lt;p&gt;The professional design make you foot more comfortable. Even more tantalizing,this pattern make your legs look as long as you can,it will make you looked more attractive.Moveover,it has reasonable price.If you are a popular woman,do not miss it.&lt;/p&gt;


	&lt;p&gt;Technical details of Christian Louboutin Velours Scrunch Suede Boots Coffee:&lt;/p&gt;


	&lt;pre&gt;&lt;code&gt;Color: Coffee
Material: Suede
4(100mm) heel
Signature red sole x&lt;/code&gt;&lt;/pre&gt;


	&lt;p&gt;Fashion, delicate, luxurious Christian louboutins shoes on sale, one of its series is Christian Louboutin Tall Boots, is urbanism collocation. This Christian louboutins shoes design makes people new and refreshing. Red soles shoes is personality, your charm will be wonderful performance.&lt;/p&gt;</description>
      <pubDate>Thu, 03 Nov 2011 09:12:54 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:5a2340ec-c2c7-4eb4-a36b-0a9a26e226e3</guid>
      <link>http://blog.objectmentor.com/articles/2008/02/04/unit-testing-c-and-c-with-ruby-and-rspec#comment-167614</link>
    </item>
    <item>
      <title>"Unit Testing C and C++ ... with Ruby and RSpec!" by vintage lace wedding dresses</title>
      <description>&lt;p&gt;the best vintage lace wedding dresses show&lt;/p&gt;</description>
      <pubDate>Wed, 05 Oct 2011 09:42:51 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:e1fd3a7e-82b0-4d4c-8690-c4d30b98501c</guid>
      <link>http://blog.objectmentor.com/articles/2008/02/04/unit-testing-c-and-c-with-ruby-and-rspec#comment-150553</link>
    </item>
    <item>
      <title>"Unit Testing C and C++ ... with Ruby and RSpec!" by Tom</title>
      <description>&lt;p&gt;Based on integral subsystem considerations, the fully integrated test program requires considerable systems analysis and trade-off studies to arrive at the  evolution of specifications over a given time period. &lt;a href="http://www.banknytt.org" rel="nofollow"&gt;Ekonomi&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Mon, 19 Sep 2011 09:48:31 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:1bd29f9a-4ece-4e91-ba3e-abcfc875b3f7</guid>
      <link>http://blog.objectmentor.com/articles/2008/02/04/unit-testing-c-and-c-with-ruby-and-rspec#comment-142874</link>
    </item>
    <item>
      <title>"Unit Testing C and C++ ... with Ruby and RSpec!" by Monster Cable Beats</title>
      <description>&lt;p&gt;If &lt;a href="http://www.mheadphones.com/beats-by-dr-dre-solo-c-67.html" rel="nofollow"&gt;&lt;strong&gt;Monster   Beats Dr Dre Headphones&lt;/strong&gt;&lt;/a&gt; help in tracking down arsonists who it and didn&amp;#8217;t get better control. In order to be able to solve crimes in time, Berlin police at present a reward of 5000 euros gather clues.&lt;/p&gt;</description>
      <pubDate>Wed, 24 Aug 2011 04:04:12 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:7c2ad585-6d4a-4781-9593-0934279d32e3</guid>
      <link>http://blog.objectmentor.com/articles/2008/02/04/unit-testing-c-and-c-with-ruby-and-rspec#comment-132190</link>
    </item>
    <item>
      <title>"Unit Testing C and C++ ... with Ruby and RSpec!" by Monster Cable Beats</title>
      <description>&lt;p&gt;if for the government, good at expression through other routes, and &lt;a href="http://www.mheadphones.com/beats-by-dr-dre-tour-c-68.html" rel="nofollow"&gt;&lt;strong&gt;Monster   Beats Dr Dre Tour&lt;/strong&gt;&lt;/a&gt;  should not be hurt civilians with the way to vent their emotions.&lt;/p&gt;</description>
      <pubDate>Wed, 24 Aug 2011 04:02:29 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:7d1fa5e1-4f2f-4613-b42e-99fccc4d8e78</guid>
      <link>http://blog.objectmentor.com/articles/2008/02/04/unit-testing-c-and-c-with-ruby-and-rspec#comment-132189</link>
    </item>
    <item>
      <title>"Unit Testing C and C++ ... with Ruby and RSpec!" by Monster Cable Beats</title>
      <description>&lt;p&gt;This shows, in fact Berlin have to individual burning cars became accustomed to, &lt;a href="http://www.mheadphones.com/heartbeats-by-lady-gaga-c-69.html" rel="nofollow"&gt;&lt;strong&gt;Lady   Gaga Heartbeats&lt;/strong&gt;&lt;/a&gt; think this is mischief.&lt;/p&gt;</description>
      <pubDate>Wed, 24 Aug 2011 03:56:21 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:2aa17438-81d3-483b-8106-9d8305b5acca</guid>
      <link>http://blog.objectmentor.com/articles/2008/02/04/unit-testing-c-and-c-with-ruby-and-rspec#comment-132187</link>
    </item>
    <item>
      <title>"Unit Testing C and C++ ... with Ruby and RSpec!" by beats by dre store</title>
      <description>&lt;p&gt;sense of our technological identity, a sense of who we are and what we&lt;a href="http://www.drdrebeatsheadphones-australia.com" rel="nofollow"&gt;high quality headphones&lt;/a&gt;
&lt;a href="http://www.drdrebeatsheadphones-australia.com" rel="nofollow"&gt;new design headphones&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Tue, 23 Aug 2011 03:38:50 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:3fcfdeda-13d1-419c-97c7-6b4494497a8e</guid>
      <link>http://blog.objectmentor.com/articles/2008/02/04/unit-testing-c-and-c-with-ruby-and-rspec#comment-131694</link>
    </item>
    <item>
      <title>"Unit Testing C and C++ ... with Ruby and RSpec!" by beats by dre store</title>
      <description>&lt;p&gt;we all need a sense of our technological identity, a sense of who we are and what we&lt;/p&gt;</description>
      <pubDate>Tue, 23 Aug 2011 03:34:26 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:2acca2df-5f69-4ee3-87e4-1a45729b204b</guid>
      <link>http://blog.objectmentor.com/articles/2008/02/04/unit-testing-c-and-c-with-ruby-and-rspec#comment-131687</link>
    </item>
    <item>
      <title>"Unit Testing C and C++ ... with Ruby and RSpec!" by Crystal Jewellery</title>
      <description>&lt;p&gt;Great post! Nice and informative, I really enjoyed reading it and will certainly share this post with my friends .  Read everything you ever wanted to know about  &lt;a href="http://www.jewelleryxy.com/engagement-rings.html" rel="nofollow"&gt;engagement rings&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Thu, 18 Aug 2011 06:29:47 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:4f93fcbb-0704-414b-bcde-8905531063c3</guid>
      <link>http://blog.objectmentor.com/articles/2008/02/04/unit-testing-c-and-c-with-ruby-and-rspec#comment-129400</link>
    </item>
    <item>
      <title>"Unit Testing C and C++ ... with Ruby and RSpec!" by Dave</title>
      <description>&lt;p&gt;To get the most of out of technology we all need a sense of our technological identity, a sense of who we are and what we need to do to see to it that technology will help us get there. &lt;a href="http://www.toowaydirect.com/pro-purchase/" rel="nofollow"&gt;Tooway Pro&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Fri, 29 Jul 2011 22:09:43 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:7ee59265-f282-4883-bd19-4a108bef64a6</guid>
      <link>http://blog.objectmentor.com/articles/2008/02/04/unit-testing-c-and-c-with-ruby-and-rspec#comment-122096</link>
    </item>
    <item>
      <title>"Unit Testing C and C++ ... with Ruby and RSpec!" by Beth</title>
      <description>&lt;p&gt;This process can be engaged in a group, but you don&#8217;t want to influence anyone or be swayed by someone as you create your initial free-form dream list of goals.
 &lt;a href="http://www.metroyards.com" rel="nofollow"&gt;Buy and sell for free online&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Thu, 21 Jul 2011 15:22:32 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:ed8cb366-5081-4c08-acf3-b946aa5e9ecf</guid>
      <link>http://blog.objectmentor.com/articles/2008/02/04/unit-testing-c-and-c-with-ruby-and-rspec#comment-119291</link>
    </item>
    <item>
      <title>"Unit Testing C and C++ ... with Ruby and RSpec!" by http://www.leprechaun-software.com</title>
      <description>&lt;p&gt;Very Nice Article About Unit Testing. Thanks for the valuable information.&lt;/p&gt;</description>
      <pubDate>Sun, 10 Jul 2011 17:20:21 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:dcdd9514-8f24-4e3e-b54b-e9047e953fa4</guid>
      <link>http://blog.objectmentor.com/articles/2008/02/04/unit-testing-c-and-c-with-ruby-and-rspec#comment-116749</link>
    </item>
    <item>
      <title>"Unit Testing C and C++ ... with Ruby and RSpec!" by mofei</title>
      <description>&lt;p&gt;Our goal is to meet the needs of the customer.If you buy more,we can give you some convenient.For our old customer,we will give a discount.
&lt;a href="http://www.gavepower.com/womens-shoes-sandal-c-218_259.html" rel="nofollow"&gt;mens sandals&lt;/a&gt;
&lt;a href="http://www.gavepower.com/womens-shoes-sandal-c-218_259.html" rel="nofollow"&gt;womens sandals size 12&lt;/a&gt;
&lt;a href="http://www.gavepower.com/womens-shoes-sandal-c-218_259.html" rel="nofollow"&gt;narrow womens sandals&lt;/a&gt;
&lt;a href="http://www.gavepower.com/womens-shoes-sandal-c-218_259.html" rel="nofollow"&gt;harley davidson womens sandals&lt;/a&gt;
&lt;a href="http://www.gavepower.com/womens-shoes-sandal-c-218_259.html" rel="nofollow"&gt;womens sandals with arch support&lt;/a&gt;
&lt;a href="http://www.gavepower.com/womens-shoes-sandal-c-218_259.html" rel="nofollow"&gt;white womens sandals&lt;/a&gt;
&lt;a href="http://www.gavepower.com/womens-shoes-sandal-c-218_259.html" rel="nofollow"&gt;sandals for women&lt;/a&gt;&lt;/p&gt;


	&lt;p&gt;&lt;a href="http://www.gavepower.com/womens-shoes-sandal-c-218_259.html" rel="nofollow"&gt;women sandals for cheap&lt;/a&gt;
&lt;a href="http://www.gavepower.com/womens-shoes-sandal-c-218_259.html" rel="nofollow"&gt;born womens sandals&lt;/a&gt;
&lt;a href="http://www.gavepower.com/womens-shoes-sandal-c-218_259.html" rel="nofollow"&gt;womens size 12 sandals&lt;/a&gt;
&lt;a href="http://www.gavepower.com/womens-shoes-sandal-c-218_259.html" rel="nofollow"&gt;womens sandals size 11&lt;/a&gt;
&lt;a href="http://www.gavepower.com/womens-shoes-sandal-c-218_259.html" rel="nofollow"&gt;womens red sandals&lt;/a&gt;
&lt;a href="http://www.gavepower.com/womens-shoes-sandal-c-218_259.html" rel="nofollow"&gt;womens golf sandals&lt;/a&gt;
&lt;a href="http://www.gavepower.com/womens-shoes-sandal-c-218_259.html" rel="nofollow"&gt;keen womens sandals&lt;/a&gt;
&lt;a href="http://www.gavepower.com/womens-shoes-sandal-c-218_259.html" rel="nofollow"&gt;women sandals sale&lt;/a&gt;
&lt;a href="http://www.gavepower.com/womens-shoes-sandal-c-218_259.html" rel="nofollow"&gt;sandals women&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Wed, 06 Jul 2011 20:58:21 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:10b3c460-40e4-48c4-936b-86c8bcb87662</guid>
      <link>http://blog.objectmentor.com/articles/2008/02/04/unit-testing-c-and-c-with-ruby-and-rspec#comment-115521</link>
    </item>
    <item>
      <title>"Unit Testing C and C++ ... with Ruby and RSpec!" by hcg diet atlanta</title>
      <description>&lt;p&gt;The theme is superb. I have just bookmarked your site. There are some conspicuous points you mentioned. It&amp;#8217;s really worth reading. Keep going.
&lt;a href="http://www.lookyoungatlanta.com/HCG-diet.html" rel="nofollow"&gt;hcg diet atlanta&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Sat, 18 Jun 2011 03:18:15 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:db5ecc7a-61f7-47d7-b603-0aa4339f22fe</guid>
      <link>http://blog.objectmentor.com/articles/2008/02/04/unit-testing-c-and-c-with-ruby-and-rspec#comment-112195</link>
    </item>
    <item>
      <title>"Unit Testing C and C++ ... with Ruby and RSpec!" by beats by dr dre headphones</title>
      <description>&lt;p&gt;&lt;a href="http://www.drebeatsstudio.com/beats-by-dr-dre-studio-c-3.html" rel="nofollow"&gt;Beats by dr dre studio&lt;/a&gt; with look after talk in white. extra attributes on &lt;a href="http://www.drebeatsstudio.com/monster-beats-by-dr-dre-pro-headphones-black-p-15.html" rel="nofollow"&gt;Monster Beats By Dr. Dre Pro Headphones Black&lt;/a&gt; a specific tri-fold design and design and carrying circumstance which make for compact and uncomplicated safe-keeping when not in use. &lt;a href="http://www.drebeatsstudio.com/beats-by-dr-dre-solo-c-5.html" rel="nofollow"&gt;Beats by dr dre solo&lt;/a&gt; .&lt;/p&gt;</description>
      <pubDate>Wed, 08 Jun 2011 20:48:19 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:1d9b8e6c-0ccc-44df-95ec-3bb1e1529a58</guid>
      <link>http://blog.objectmentor.com/articles/2008/02/04/unit-testing-c-and-c-with-ruby-and-rspec#comment-109183</link>
    </item>
    <item>
      <title>"Unit Testing C and C++ ... with Ruby and RSpec!" by epl stream</title>
      <description>&lt;p&gt;I think it shows promise.&lt;/p&gt;</description>
      <pubDate>Sun, 05 Jun 2011 23:43:19 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:0114bfd4-6599-4551-b705-dac0a8685a9d</guid>
      <link>http://blog.objectmentor.com/articles/2008/02/04/unit-testing-c-and-c-with-ruby-and-rspec#comment-108416</link>
    </item>
    <item>
      <title>"Unit Testing C and C++ ... with Ruby and RSpec!" by free live stream</title>
      <description>&lt;p&gt;a make task could fill a template file with the changed list of source files during the build&lt;/p&gt;</description>
      <pubDate>Sun, 05 Jun 2011 23:42:44 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:bf537042-91b9-4790-afc2-58e66a55409e</guid>
      <link>http://blog.objectmentor.com/articles/2008/02/04/unit-testing-c-and-c-with-ruby-and-rspec#comment-108415</link>
    </item>
    <item>
      <title>"Unit Testing C and C++ ... with Ruby and RSpec!" by Jewellery</title>
      <description>&lt;p&gt;i am happyr for your responses&lt;/p&gt;</description>
      <pubDate>Sat, 04 Jun 2011 05:26:23 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:4cd5429a-ecb2-4127-ac24-7bd6bf8d6ca8</guid>
      <link>http://blog.objectmentor.com/articles/2008/02/04/unit-testing-c-and-c-with-ruby-and-rspec#comment-108013</link>
    </item>
  </channel>
</rss>

