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

<channel>
	<title>Blog &#124; Rubyyot &#187; Rearden</title>
	<atom:link href="http://blog.rubyyot.com/category/programming/castle/rearden/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.rubyyot.com</link>
	<description>Programming, Pragmatism and Getting By in the World</description>
	<lastBuildDate>Wed, 24 Mar 2010 00:14:27 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Using Factories for testing Castle ActiveRecord: Part 2 : Rearden</title>
		<link>http://blog.rubyyot.com/2009/01/using-factories-for-testing-castle-activerecord-part-2-rearden/</link>
		<comments>http://blog.rubyyot.com/2009/01/using-factories-for-testing-castle-activerecord-part-2-rearden/#comments</comments>
		<pubDate>Thu, 08 Jan 2009 07:26:37 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Castle]]></category>
		<category><![CDATA[Rearden]]></category>
		<category><![CDATA[activerecord]]></category>
		<category><![CDATA[Testing]]></category>

		<guid isPermaLink="false">http://blog.rubyyot.com/?p=31</guid>
		<description><![CDATA[earlier I posted about using factories for testing Castle ActiveRecord.  I now have an update that I call Rearden.  Here is is]]></description>
			<content:encoded><![CDATA[<p>Earlier <a title="Testing Castle ActiveRecord with Factories" href="http://blog.rubyyot.com/?p=17" target="_blank">I posted about using factories for testing Castle ActiveRecord</a>. I now have an update that I call Rearden.  Here is is:</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF;">using</span> <span style="color: #008080;">System</span><span style="color: #008000;">;</span>
<span style="color: #0600FF;">using</span> <span style="color: #008080;">System.Collections.Generic</span><span style="color: #008000;">;</span>
<span style="color: #0600FF;">using</span> <span style="color: #008080;">Castle.ActiveRecord</span><span style="color: #008000;">;</span>
&nbsp;
<span style="color: #0600FF;">namespace</span> Rearden
<span style="color: #000000;">&#123;</span>
    <span style="color: #0600FF;">public</span> <span style="color: #FF0000;">delegate</span> <span style="color: #0600FF;">void</span> ModifyClass<span style="color: #000000;">&#40;</span>ActiveRecordClass instance, IDictionary overrides<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
    <span style="color: #008080; font-style: italic;">///</span>
    <span style="color: #008080; font-style: italic;">/// This is a factory to create test objects for Castle ActiveRecord.</span>
    <span style="color: #008080; font-style: italic;">///</span>
    <span style="color: #0600FF;">public</span> <span style="color: #0600FF;">static</span> <span style="color: #FF0000;">class</span> Factory
    <span style="color: #000000;">&#123;</span>
        <span style="color: #008080; font-style: italic;">// overload to call without overrides</span>
        <span style="color: #0600FF;">public</span> <span style="color: #0600FF;">static</span> ActiveRecordClass Init<span style="color: #000000;">&#40;</span>ModifyClass modifyClass<span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            <span style="color: #0600FF;">return</span> Init<span style="color: #000000;">&#40;</span>modifyClass, <span style="color: #008000;">new</span> Dictionary<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
        <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #008080; font-style: italic;">// instanciate and set values in ActiveRecordClass</span>
        <span style="color: #0600FF;">public</span> <span style="color: #0600FF;">static</span> ActiveRecordClass Init<span style="color: #000000;">&#40;</span>ModifyClass modifyClass, IDictionary overrides<span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            ActiveRecordClass instance <span style="color: #008000;">=</span> <span style="color: #000000;">&#40;</span>ActiveRecordClass<span style="color: #000000;">&#41;</span>Activator.<span style="color: #0000FF;">CreateInstance</span><span style="color: #000000;">&#40;</span><span style="color: #008000;">typeof</span><span style="color: #000000;">&#40;</span>ActiveRecordClass<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            modifyClass<span style="color: #000000;">&#40;</span>instance, overrides<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #0600FF;">return</span> instance<span style="color: #008000;">;</span>
        <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #008080; font-style: italic;">// overload to call without overrides</span>
        <span style="color: #0600FF;">public</span> <span style="color: #0600FF;">static</span> ActiveRecordClass Make<span style="color: #000000;">&#40;</span>ModifyClass modifyClass<span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            <span style="color: #0600FF;">return</span> Make<span style="color: #000000;">&#40;</span>modifyClass, <span style="color: #008000;">new</span> Dictionary<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
        <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #008080; font-style: italic;">// create, save and flush ActiveRecordClass</span>
        <span style="color: #0600FF;">public</span> <span style="color: #0600FF;">static</span> ActiveRecordClass Make<span style="color: #000000;">&#40;</span>ModifyClass modifyClass, IDictionary overrides<span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            ActiveRecordClass instance <span style="color: #008000;">=</span> Init<span style="color: #000000;">&#40;</span>modifyClass, overrides<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            ActiveRecordBase asBase <span style="color: #008000;">=</span> instance <span style="color: #0600FF;">as</span> ActiveRecordBase<span style="color: #008000;">;</span>
            asBase.<span style="color: #0000FF;">SaveAndFlush</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #0600FF;">return</span> instance<span style="color: #008000;">;</span>
        <span style="color: #000000;">&#125;</span>
&nbsp;
    <span style="color: #000000;">&#125;</span>
&nbsp;
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>Add the compiled Rearden Assembly to your Test Assembly and then create a Blueprint class:</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF;">using</span> <span style="color: #008080;">System</span><span style="color: #008000;">;</span>
<span style="color: #0600FF;">using</span> <span style="color: #008080;">System.Collections.Generic</span><span style="color: #008000;">;</span>
<span style="color: #0600FF;">using</span> <span style="color: #008080;">System.Text</span><span style="color: #008000;">;</span>
&nbsp;
<span style="color: #0600FF;">namespace</span> Quality.<span style="color: #0000FF;">Model</span>
<span style="color: #000000;">&#123;</span>
    <span style="color: #0600FF;">public</span> <span style="color: #0600FF;">static</span> <span style="color: #FF0000;">class</span> Blueprints
    <span style="color: #000000;">&#123;</span>
        <span style="color: #0600FF;">public</span> <span style="color: #0600FF;">static</span> <span style="color: #0600FF;">void</span> Blueprint<span style="color: #000000;">&#40;</span>Employee emp, IDictionary overrides<span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            emp.<span style="color: #0000FF;">FirstName</span> <span style="color: #008000;">=</span> overrides.<span style="color: #0000FF;">ContainsKey</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;FirstName&quot;</span><span style="color: #000000;">&#41;</span> <span style="color: #008000;">?</span> <span style="color: #000000;">&#40;</span><span style="color: #FF0000;">string</span><span style="color: #000000;">&#41;</span>overrides<span style="color: #000000;">&#91;</span><span style="color: #666666;">&quot;FirstName&quot;</span><span style="color: #000000;">&#93;</span> <span style="color: #008000;">:</span> Faker.<span style="color: #0000FF;">NameFaker</span>.<span style="color: #0000FF;">FirstName</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            emp.<span style="color: #0000FF;">LastName</span> <span style="color: #008000;">=</span> overrides.<span style="color: #0000FF;">ContainsKey</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;LastName&quot;</span><span style="color: #000000;">&#41;</span> <span style="color: #008000;">?</span> <span style="color: #000000;">&#40;</span><span style="color: #FF0000;">string</span><span style="color: #000000;">&#41;</span>overrides<span style="color: #000000;">&#91;</span><span style="color: #666666;">&quot;LastName&quot;</span><span style="color: #000000;">&#93;</span> <span style="color: #008000;">:</span> Faker.<span style="color: #0000FF;">NameFaker</span>.<span style="color: #0000FF;">LastName</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            emp.<span style="color: #0000FF;">Xid</span> <span style="color: #008000;">=</span> overrides.<span style="color: #0000FF;">ContainsKey</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;Xid&quot;</span><span style="color: #000000;">&#41;</span> <span style="color: #008000;">?</span> <span style="color: #000000;">&#40;</span><span style="color: #FF0000;">string</span><span style="color: #000000;">&#41;</span>overrides<span style="color: #000000;">&#91;</span><span style="color: #666666;">&quot;Xid&quot;</span><span style="color: #000000;">&#93;</span> <span style="color: #008000;">:</span> Faker.<span style="color: #0000FF;">StringFaker</span>.<span style="color: #0000FF;">Randomize</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;X######&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
        <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF;">public</span> <span style="color: #0600FF;">static</span> <span style="color: #0600FF;">void</span> Blueprint<span style="color: #000000;">&#40;</span>Foo foo, IDictionary overrides<span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            foo.<span style="color: #0000FF;">Month</span> <span style="color: #008000;">=</span> overrides.<span style="color: #0000FF;">ContainsKey</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;Month&quot;</span><span style="color: #000000;">&#41;</span> <span style="color: #008000;">?</span> <span style="color: #000000;">&#40;</span>DateTime<span style="color: #000000;">&#41;</span>overrides<span style="color: #000000;">&#91;</span><span style="color: #666666;">&quot;Month&quot;</span><span style="color: #000000;">&#93;</span> <span style="color: #008000;">:</span> <span style="color: #008000;">new</span> DateTime<span style="color: #000000;">&#40;</span>Faker.<span style="color: #0000FF;">NumberFaker</span>.<span style="color: #0000FF;">Number</span><span style="color: #000000;">&#40;</span><span style="color: #FF0000;">2000</span>, <span style="color: #FF0000;">2009</span><span style="color: #000000;">&#41;</span>, Faker.<span style="color: #0000FF;">NumberFaker</span>.<span style="color: #0000FF;">Number</span><span style="color: #000000;">&#40;</span><span style="color: #FF0000;">1</span>, <span style="color: #FF0000;">12</span><span style="color: #000000;">&#41;</span>, <span style="color: #FF0000;">1</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            foo.<span style="color: #0000FF;">Employee</span> <span style="color: #008000;">=</span> overrides.<span style="color: #0000FF;">ContainsKey</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;Employee&quot;</span><span style="color: #000000;">&#41;</span> <span style="color: #008000;">?</span> <span style="color: #000000;">&#40;</span>Employee<span style="color: #000000;">&#41;</span>overrides<span style="color: #000000;">&#91;</span><span style="color: #666666;">&quot;Employee&quot;</span><span style="color: #000000;">&#93;</span> <span style="color: #008000;">:</span>  <span style="color: #000000;">&#40;</span>Employee<span style="color: #000000;">&#41;</span>Rearden.<span style="color: #0000FF;">Factory</span>.<span style="color: #0000FF;">Make</span><span style="color: #000000;">&#40;</span>Blueprint<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
        <span style="color: #000000;">&#125;</span>
    <span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>And now your test looks like:</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;">        <span style="color: #000000;">&#91;</span>Test<span style="color: #000000;">&#93;</span>
        <span style="color: #0600FF;">public</span> <span style="color: #0600FF;">void</span> Can_find_by_Xid<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
&nbsp;
            _values<span style="color: #000000;">&#91;</span><span style="color: #666666;">&quot;Xid&quot;</span><span style="color: #000000;">&#93;</span> <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;X123456&quot;</span><span style="color: #008000;">;</span> <span style="color: #008080; font-style: italic;">// Dictionary</span>
            Rearden.<span style="color: #0000FF;">Factory</span>.<span style="color: #0000FF;">Make</span><span style="color: #000000;">&#40;</span>Blueprints.<span style="color: #0000FF;">Blueprint</span>, _values<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            Employee fromDB <span style="color: #008000;">=</span> Employee.<span style="color: #0000FF;">FindByXid</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;X123456&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            Assert.<span style="color: #0000FF;">AreEqual</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;X123456&quot;</span>, fromDB.<span style="color: #0000FF;">Xid</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
        <span style="color: #000000;">&#125;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://blog.rubyyot.com/2009/01/using-factories-for-testing-castle-activerecord-part-2-rearden/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
