<feed xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns="http://www.w3.org/2005/Atom" xml:lang="en-US">
    <title>John's Blog</title>
    <link rel="self" type="application/xml" href="http://geekswithblogs.net/johnteague/Atom.aspx" />
    <subtitle type="html">Learn from My Mistakes</subtitle>
    <id>http://geekswithblogs.net/johnteague/Default.aspx</id>
    <author>
        <name>John Teague</name>
        <uri>http://geekswithblogs.net/johnteague/Default.aspx</uri>
    </author>
    <generator uri="http://subtextproject.com" version="Subtext Version 0.0.0.0">Subtext</generator>
    <updated>2008-05-27T22:24:22Z</updated>
    <entry>
        <title>psst... I'm over here...</title>
        <link rel="self" type="text/html" href="http://geekswithblogs.net/johnteague/archive/2008/05/27/psst.-im-over-here.aspx" />
        <id>http://geekswithblogs.net/johnteague/archive/2008/05/27/psst.-im-over-here.aspx</id>
        <published>2008-05-27T22:24:22-05:00:00</published>
        <updated>2008-05-27T22:24:22Z</updated>
        <content type="html">Los Techies was kind enough to let me join their inner circle.  Hopefully the hazing won't be too bad.&lt;br /&gt;
&lt;br /&gt;
You can follow &lt;a href="http://johnteague.lostechies.com"&gt;my blog here now&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
So long, and thanks for all the fish.&lt;img src="http://geekswithblogs.net/johnteague/aggbug/122428.aspx" width="1" height="1" /&gt;</content>
        <wfw:comment>http://geekswithblogs.net/johnteague/comments/122428.aspx</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://geekswithblogs.net/johnteague/comments/commentRss/122428.aspx</wfw:commentRss>
        <trackback:ping>http://geekswithblogs.net/johnteague/services/trackbacks/122428.aspx</trackback:ping>
    </entry>
    <entry>
        <title>Testing Active Record</title>
        <link rel="self" type="text/html" href="http://geekswithblogs.net/johnteague/archive/2008/04/23/testing-active-record.aspx" />
        <id>http://geekswithblogs.net/johnteague/archive/2008/04/23/testing-active-record.aspx</id>
        <published>2008-04-23T01:00:25-05:00:00</published>
        <updated>2008-07-20T21:33:57Z</updated>
        <content type="html">&lt;p class="MsoNormal"&gt;While trying to get up to speed on using Castle’s ActiveRecord framework, one of the first things I needed to do was figure out how to test my ActiveRecord objects.&lt;span style=""&gt;  &lt;/span&gt;There are some a &lt;a href="http://www.castleproject.org/activerecord/documentation/trunk/usersguide/unittesting.html"&gt;good &lt;/a&gt;  &lt;a href="http://www.ayende.com/Blog/archive/2006/10/14/7183.aspx"&gt;articles&lt;/a&gt;  that describes how to us a base test class to get your unit tests up and running.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;In a nutshell you need to have a TestFixtureStartup to initialize ActiveRecord.&lt;span style=""&gt;  &lt;/span&gt;You need to call the &lt;span style="font-family: Consolas; color: rgb(43, 145, 175);"&gt;ActiveRecordStarter&lt;/span&gt;&lt;span style="font-family: Consolas;"&gt;.Initialize to get AR ready to go.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style=""&gt;However, I have yet to find to opposite of this method to stop ActiveRecord on TestFixtureTearDown.&lt;span style=""&gt;  &lt;/span&gt;This becomes a problem when you have multiple test classes.&lt;span style=""&gt;  &lt;/span&gt;AR will yell at for already creating an instance.&lt;span style=""&gt;  &lt;/span&gt;I solved this with a static guard variable.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue;"&gt;private&lt;/span&gt;&lt;span style="font-family: Consolas;"&gt; &lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;bool&lt;/span&gt; _isActivated = &lt;span style="color: blue;"&gt;false&lt;/span&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas;"&gt;…&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-family: Consolas; color: blue;"&gt;if&lt;/span&gt;&lt;span style="font-family: Consolas;"&gt;(!_isActivated)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-family: Consolas;"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-bottom: 0.0001pt; text-indent: 0.5in; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-family: Consolas;"&gt;_isActivated = &lt;span style="color: blue;"&gt;true&lt;/span&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-bottom: 0.0001pt; line-height: normal;" class="MsoNormal"&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style=""&gt; &lt;/span&gt;&lt;span style=""&gt;     &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;ActiveRecordStarter&lt;/span&gt;.Initialize(source, &lt;span style="color: blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color: rgb(43, 145, 175);"&gt;…&lt;/span&gt;));&lt;span style=""&gt;    &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas;"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas;"&gt;If there is a better way of doing this please let me know.&lt;/span&gt;&lt;/p&gt;
&lt;span style="font-size: 11pt; line-height: 115%; font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;One very cool thing is that you can leverage Nhibernate’s ability to create and drop schemas.&lt;span style=""&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 11pt; line-height: 115%; font-family: Consolas; color: rgb(43, 145, 175);"&gt;ActiveRecordStarter&lt;/span&gt;&lt;span style="font-size: 11pt; line-height: 115%; font-family: Consolas;"&gt;.CreateSchema() &lt;/span&gt;&lt;span style="font-size: 11pt; line-height: 115%; font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;will create your database schema based off of your ActiveRecord classes.&lt;span style=""&gt;  &lt;/span&gt;I like this feature, though I wouldn’t use it for real integration tests because I want to make sure that my database migration process works when I deploy to production.&lt;/span&gt;&lt;img src="http://geekswithblogs.net/johnteague/aggbug/121526.aspx" width="1" height="1" /&gt;</content>
        <wfw:comment>http://geekswithblogs.net/johnteague/comments/121526.aspx</wfw:comment>
        <slash:comments>1</slash:comments>
        <wfw:commentRss>http://geekswithblogs.net/johnteague/comments/commentRss/121526.aspx</wfw:commentRss>
        <trackback:ping>http://geekswithblogs.net/johnteague/services/trackbacks/121526.aspx</trackback:ping>
    </entry>
    <entry>
        <title>Using Database Repository Pattern with ActiveRecord with ActiveRecordMediator</title>
        <link rel="self" type="text/html" href="http://geekswithblogs.net/johnteague/archive/2008/04/23/using-database-repository-pattern-with-activerecord-with-activerecordmediator.aspx" />
        <id>http://geekswithblogs.net/johnteague/archive/2008/04/23/using-database-repository-pattern-with-activerecord-with-activerecordmediator.aspx</id>
        <published>2008-04-23T00:56:41-05:00:00</published>
        <updated>2008-04-23T00:57:54Z</updated>
        <content type="html">&lt;p class="MsoNormal"&gt;Castle’s ActiveRecord frame work is an easy way to get introduced to NHibernate if you’re not familiar with setting up and using NHibernate (which I’m not).&lt;span style=""&gt;  &lt;/span&gt;However many people are not fond of the ActiveRecord pattern.&lt;span style=""&gt;  &lt;/span&gt;It can be a leaky abstraction, putting persistence related functions on your domain model is not a very clean separation of concerns for many people.&lt;span style=""&gt;  &lt;/span&gt;I tend to agree with this.&lt;span style=""&gt;  &lt;/span&gt;It really does depend on the complexity of your application.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;When learning about AR I read a lot of blog entries or the documentation, people elude to how you can use AR API in a repository fashion, but I could find very few examples of how to uses.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;It turns out there is an innocuous object within the API call &lt;span style="font-family: Consolas; color: rgb(43, 145, 175);"&gt;ActiveRecordMediator&lt;/span&gt;&lt;span style="font-family: Consolas;"&gt;&amp;lt;T&amp;gt;.&lt;span style=""&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 11pt; line-height: 115%; font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;This little guy has all of the persitance related methods you normally call directly on your ActiveRecord object.&lt;span style=""&gt;  &lt;/span&gt;With this object you can use a Repository style DAL.&lt;span style=""&gt;  &lt;/span&gt;Here is my simple BaseRepository that I inherit from to take advantage of ActiveRecordMediator.&lt;span style=""&gt;  &lt;/span&gt;You can extend this further of course, but it’s all I need at the moment.&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-family: Consolas; color: blue;"&gt;public&lt;/span&gt;&lt;span style="font-family: Consolas;"&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;BaseRepository&lt;/span&gt;&amp;lt;T&amp;gt; : &lt;span style="color: rgb(43, 145, 175);"&gt;IRepository&lt;/span&gt;&amp;lt;T&amp;gt; &lt;span style="color: blue;"&gt;where&lt;/span&gt; T :&lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style=""&gt;    &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style=""&gt;        &lt;/span&gt;&lt;span style="color: blue;"&gt;protected&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;ActiveRecordMediator&lt;/span&gt;&amp;lt;T&amp;gt; mediator;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-family: Consolas;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style=""&gt;        &lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;virtual&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; Save(T item)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style=""&gt;        &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style=""&gt;            &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;ActiveRecordMediator&lt;/span&gt;&amp;lt;T&amp;gt;.Save(item);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style=""&gt;            &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style=""&gt;        &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style=""&gt;        &lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;virtual&lt;/span&gt; T FindById(&lt;span style="color: blue;"&gt;object&lt;/span&gt; id)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style=""&gt;        &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style=""&gt;            &lt;/span&gt;&lt;span style="color: blue;"&gt;return&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;ActiveRecordMediator&lt;/span&gt;&amp;lt;T&amp;gt;.FindByPrimaryKey(id);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style=""&gt;        &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-family: Consolas;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style=""&gt;        &lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;virtual&lt;/span&gt; T FindOne(&lt;span style="color: blue;"&gt;params&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;ICriterion&lt;/span&gt;[] criteria)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style=""&gt;        &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style=""&gt;            &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style=""&gt;            &lt;/span&gt;&lt;span style="color: blue;"&gt;return&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;ActiveRecordMediator&lt;/span&gt;&amp;lt;T&amp;gt;.FindOne(criteria);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style=""&gt;            &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style=""&gt;        &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style=""&gt;        &lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;virtual&lt;/span&gt; T[] FindAll()&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style=""&gt;        &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style=""&gt;        &lt;/span&gt;&lt;span style=""&gt;    &lt;/span&gt;&lt;span style="color: blue;"&gt;return&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;ActiveRecordMediator&lt;/span&gt;&amp;lt;T&amp;gt;.FindAll();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style=""&gt;        &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-family: Consolas;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style=""&gt;        &lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;virtual&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; Count()&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style=""&gt;        &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style=""&gt;            &lt;/span&gt;&lt;span style="color: blue;"&gt;return&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;ActiveRecordMediator&lt;/span&gt;&amp;lt;T&amp;gt;.Count();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style=""&gt;        &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-family: Consolas;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-family: Consolas;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style=""&gt;        &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style=""&gt;    &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;img src="http://geekswithblogs.net/johnteague/aggbug/121525.aspx" width="1" height="1" /&gt;</content>
        <wfw:comment>http://geekswithblogs.net/johnteague/comments/121525.aspx</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://geekswithblogs.net/johnteague/comments/commentRss/121525.aspx</wfw:commentRss>
        <trackback:ping>http://geekswithblogs.net/johnteague/services/trackbacks/121525.aspx</trackback:ping>
    </entry>
    <entry>
        <title>ASP.Net MVC Framework Links</title>
        <link rel="self" type="text/html" href="http://geekswithblogs.net/johnteague/archive/2007/12/09/asp.net-mvc-framework-links.aspx" />
        <id>http://geekswithblogs.net/johnteague/archive/2007/12/09/asp.net-mvc-framework-links.aspx</id>
        <published>2007-12-09T22:10:14-06:00:00</published>
        <updated>2007-12-09T22:10:14Z</updated>
        <content type="html">ASP.Net MVC Framework Links&lt;br /&gt;
&lt;br /&gt;
Here is a list of all of the MVC Framework Postings / links that I know of or at least have read.&lt;br /&gt;
&lt;br /&gt;
The Download.&lt;br /&gt;
The download was a little more buried than I anticipated.  It wasn't on the front page of asp.net, at least not when I found it.&lt;br /&gt;
&lt;br /&gt;
&lt;a id="ug_2" title="http://www.asp.net/downloads/3.5-extensions/" href="http://www.asp.net/downloads/3.5-extensions/"&gt;http://www.asp.net/downloads/3.5-extensions/&lt;/a&gt; &lt;br /&gt;
&lt;br /&gt;
From Here you can find the Quickstarts and other official Links&lt;br /&gt;
&lt;br /&gt;
Scott Gutherie has a good set of articles.  If he's not in your blog roll, he really should be.&lt;br /&gt;
&lt;br /&gt;
&lt;a id="a6o." title="Part 1" href="http://weblogs.asp.net/scottgu/archive/2007/11/13/asp-net-mvc-framework-part-1.aspx"&gt;Part 1 (Intro)&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a id="av72" title="Part 2  -- Url Routing" href="http://weblogs.asp.net/scottgu/archive/2007/12/03/asp-net-mvc-framework-part-2-url-routing.aspx"&gt;Part 2  -- Url Routing&lt;/a&gt; &lt;br /&gt;
&lt;br /&gt;
&lt;a id="sm1o" title="Part 2 -- View Data" href="http://weblogs.asp.net/scottgu/archive/2007/12/06/asp-net-mvc-framework-part-3-passing-viewdata-from-controllers-to-views.aspx"&gt;Part 3 -- View Data&lt;/a&gt; &lt;br /&gt;
&lt;br /&gt;
&lt;a id="gfr6" title="Part 4 -- Handling Form Edits and Posts" href="http://weblogs.asp.net/scottgu/archive/2007/12/09/asp-net-mvc-framework-part-4-handling-form-edit-and-post-scenarios.aspx"&gt;Part 4 -- Handling Form Edits and Posts&lt;/a&gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Rob Conery is also on the team and has been working on the MVC toolkit.  Here is the best documentation so far on using the Helpers.&lt;br /&gt;
&lt;br /&gt;
&lt;a id="m898" title="MVC UI Helpers" href="http://blog.wekeroad.com/2007/12/05/aspnet-mvc-preview-using-the-mvc-ui-helpers/"&gt;MVC UI Helpers&lt;/a&gt; &lt;br /&gt;
&lt;br /&gt;
&lt;a id="fejz" title="RESTful Architecture with MVC Framework" href="http://blog.wekeroad.com/2007/12/06/aspnet-mvc-using-restful-architecture/"&gt;RESTful Architecture with MVC Framework&lt;/a&gt;  I'm not sure I like all of the statements/conclusions in the post, but it does have some good code samples.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Phil Haack, who is on the MVC team has a some really good posts&lt;br /&gt;
&lt;br /&gt;
&lt;a id="cjan" title="TDD and Dependency Injection" href="http://haacked.com/archive/2007/12/07/tdd-and-dependency-injection-with-asp.net-mvc.aspx"&gt;TDD and Dependency Injection&lt;/a&gt; &lt;br /&gt;
&lt;br /&gt;
&lt;a id="e66y" title="Fredrik Normén" href="http://weblogs.asp.net/fredriknormen/default.aspx"&gt;Fredrik Normén&lt;/a&gt; has a lot of blog entries on the subject.  I'm not sure I like all of his examples either, but I'll let you be the judge.  Until I started making the links I didn't realize how many he had, so I stopped, you can find them on his blog :)&lt;br /&gt;
 &lt;br /&gt;
&lt;a id="f_s-" title="Security" href="http://weblogs.asp.net/fredriknormen/archive/2007/11/25/asp-net-mvc-framework-security.aspx"&gt;Security&lt;/a&gt; &lt;br /&gt;
&lt;br /&gt;
&lt;a id="hj4k" title="Exception Handling" href="http://weblogs.asp.net/fredriknormen/archive/2007/11/19/asp-net-mvc-framework-exception-handling.aspx"&gt;Exception Handling&lt;/a&gt; &lt;br /&gt;
&lt;br /&gt;
&lt;a id="gfx6" title="Creating a Route Handler" href="http://weblogs.asp.net/fredriknormen/archive/2007/11/19/asp-net-mvc-framework-exception-handling.aspx"&gt;Creating a Route Handler&lt;/a&gt; &lt;br /&gt;
&lt;br /&gt;
&lt;a id="yuny" title="IControllerFactory with Spring.Net" href="http://fredrik.nsquared2.com/ViewPost.aspx?PostID=465"&gt;IControllerFactory with Spring.Net&lt;/a&gt; &lt;br /&gt;
&lt;br /&gt;
&lt;a id="zfy2" title="Jeffrey Pallermo" href="http://codebetter.com/blogs/jeffrey.palermo/default.aspx"&gt;Jeffrey Pallermo&lt;/a&gt; has been involved with MS from the start of the framework.  He has some podcasts out there on the framework as well as the &lt;a id="mrzu" title="MVCContrib" href="http://mvccontrib.org/"&gt;MVCContrib&lt;/a&gt; project.&lt;br /&gt;
&lt;br /&gt;
&lt;a id="pl:-" title="podcast with Craig Shoemaker" href="http://polymorphicpodcast.com/shows/aspnetmvc/"&gt;podcast with Craig Shoemaker&lt;/a&gt;   I haven't heard this one yet.&lt;br /&gt;
&lt;br /&gt;
&lt;a id="sxek" title="podcast with wally on topic" href="http://aspnetpodcast.com/CS11/blogs/asp.net_podcast/archive/2007/11/20/asp-net-podcast-show-104-asp-net-mvc-with-jeff-palermo-audio.aspx"&gt;podcast with wally on topic&lt;/a&gt; &lt;br /&gt;
&lt;br /&gt;
&lt;a id="qp2." title="Hammet" href="http://hammett.castleproject.org/"&gt;Hammet&lt;/a&gt; from Castle Project has an article about his &lt;a id="bi1o" title="first look" href="http://hammett.castleproject.org/?p=219"&gt;first look&lt;/a&gt; at the framework.  This is another blog to watch&lt;br /&gt;
&lt;br /&gt;
I'll try to keep this updated.  I'm sure the number of posts is going to be increasing with the public release.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;img src="http://geekswithblogs.net/johnteague/aggbug/117528.aspx" width="1" height="1" /&gt;</content>
        <wfw:comment>http://geekswithblogs.net/johnteague/comments/117528.aspx</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://geekswithblogs.net/johnteague/comments/commentRss/117528.aspx</wfw:commentRss>
        <trackback:ping>http://geekswithblogs.net/johnteague/services/trackbacks/117528.aspx</trackback:ping>
    </entry>
    <entry>
        <title>Some of My Favorite jQuery Things</title>
        <link rel="self" type="text/html" href="http://geekswithblogs.net/johnteague/archive/2007/12/05/some-of-my-favorite-jquery-things.aspx" />
        <id>http://geekswithblogs.net/johnteague/archive/2007/12/05/some-of-my-favorite-jquery-things.aspx</id>
        <published>2007-12-05T23:56:03-06:00:00</published>
        <updated>2007-12-05T23:57:26Z</updated>
        <content type="html">&lt;p&gt;This example shows two of my favorite things about jQuery:  chainable methods and the find method.  The find method is the easiest way to find decendent objects.  There are many other ways, but when you to perform work on the parent and the child, chaining the work keeps the code tight and reduces the number of object that must be created&lt;/p&gt;
&lt;p&gt;Let's say you have something like this:&lt;/p&gt;
&lt;p&gt;&amp;lt;div id='containerForList'&amp;gt;&lt;br /&gt;
    &amp;lt;span id='listLabel&amp;gt;Description of List Goes Here&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&amp;lt;!-- items go here --&amp;gt;&lt;br /&gt;
         &lt;br /&gt;
&lt;br /&gt;
   &amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;p&gt;And you need to perform several tasks.  Display the Container and Add a new Item to the UL. &lt;/p&gt;
&lt;p&gt;There are several ways to get to it.  You can separate this into two calls, create an object for the div and then create an object for the ul and perform the tasks on those seperately.  Another approach is to chain these actions together.&lt;/p&gt;
&lt;p&gt;$('#containerForList').show().find("ul").append("&amp;lt;li&amp;gt;A new Item to the list&amp;lt;/li&amp;gt;");&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Of course like all examples, they are always too contrived, but you get the idea.&lt;/p&gt;&lt;img src="http://geekswithblogs.net/johnteague/aggbug/117419.aspx" width="1" height="1" /&gt;</content>
        <wfw:comment>http://geekswithblogs.net/johnteague/comments/117419.aspx</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://geekswithblogs.net/johnteague/comments/commentRss/117419.aspx</wfw:commentRss>
        <trackback:ping>http://geekswithblogs.net/johnteague/services/trackbacks/117419.aspx</trackback:ping>
    </entry>
    <entry>
        <title>Want to learn more about Alt.Net, join the Altnetconf user group</title>
        <link rel="self" type="text/html" href="http://geekswithblogs.net/johnteague/archive/2007/10/21/Altnetconf-user-group.aspx" />
        <id>http://geekswithblogs.net/johnteague/archive/2007/10/21/Altnetconf-user-group.aspx</id>
        <published>2007-10-21T16:25:16-05:00:00</published>
        <updated>2007-10-21T16:27:58Z</updated>
        <content type="html">&lt;p&gt;So you  may have heard the Alt.Net moniker being thrown around.   You might have become curious enough to read &lt;a href="http://laribee.com/blog/2007/04/10/altnet/"&gt;David &lt;span class="misspell" suggestions="Larine,Laurie,Laramie,Latrobe,Laraine"&gt;Laribee&lt;/span&gt;&lt;/a&gt;.  But do you want to learn where the rubber meets the metal?&lt;/p&gt;
&lt;p&gt;Join the &lt;a href="http://tech.groups.yahoo.com/group/altnetconf/"&gt;&lt;span class="misspell" suggestions=""&gt;AltNetConf&lt;/span&gt; User Group&lt;/a&gt; and subscribe to the mailing list.  This is becoming a very active group where people are asking questions about how people are using different strategies facing just about every .net (or otherwise) out there when it comes to building and testing coherent and maintainable software.  Contrary to what other people in the &lt;span class="misspell" suggestions=""&gt;blogosphere&lt;/span&gt; are saying, this is a very open group and appreciate open dialog.  There are some threads on there that are about the growing pains that any new community goes through.  You can skip those if you want.  I usually read one or two so I know what the discussion about.&lt;/p&gt;&lt;img src="http://geekswithblogs.net/johnteague/aggbug/116208.aspx" width="1" height="1" /&gt;</content>
        <wfw:comment>http://geekswithblogs.net/johnteague/comments/116208.aspx</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://geekswithblogs.net/johnteague/comments/commentRss/116208.aspx</wfw:commentRss>
        <trackback:ping>http://geekswithblogs.net/johnteague/services/trackbacks/116208.aspx</trackback:ping>
    </entry>
    <entry>
        <title>Using The DLR with the the MVC Framework</title>
        <link rel="self" type="text/html" href="http://geekswithblogs.net/johnteague/archive/2007/10/09/Using-The-DLR-with-the-the-MVC-Framework.aspx" />
        <id>http://geekswithblogs.net/johnteague/archive/2007/10/09/Using-The-DLR-with-the-the-MVC-Framework.aspx</id>
        <published>2007-10-09T13:27:43-05:00:00</published>
        <updated>2007-10-09T13:30:49Z</updated>
        <content type="html">&lt;p&gt;There have been plenty of posts about the new asp.net MVC framework that was posted from the alt.net conference.  There's very little that I can add to those posts other than I am really excited.&lt;/p&gt;
&lt;p&gt;Right after that &lt;a href="http://www.hanselman.com/blog/ScottGuMVCPresentationAndScottHaScreencastFromALTNETConference.aspx"&gt;Scott Hanselman &lt;/a&gt; (the link to the video is in this link) did a demo of possible ways the MVC could be used to along with the Dynamic Language Runtime.  Not only is the MVC code in prototype, but Scott really only had a couple days to show how you could use the DLR with it, so obviously what was shown was rough around the edges.  Which is fine, because what the sessions was for (and the conference for that matter) was to spark you imagination.&lt;/p&gt;
&lt;p&gt;What he showed was that it's possible to do the View or the Controller in a dynamic runtime and leave your Model in the CLR.  To me that's huge, because now I can take the parts I like about Ruby on Rails (view helpers first and formost) and use C# to do my entity objects.  To me this goes hand in hand with the principels of agile, use the best tools for the job and don't repeat yourself.&lt;/p&gt;
&lt;p&gt;It will be great to just pick the best language and not worry about dynamic vs static.&lt;/p&gt;&lt;img src="http://geekswithblogs.net/johnteague/aggbug/115957.aspx" width="1" height="1" /&gt;</content>
        <wfw:comment>http://geekswithblogs.net/johnteague/comments/115957.aspx</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://geekswithblogs.net/johnteague/comments/commentRss/115957.aspx</wfw:commentRss>
        <trackback:ping>http://geekswithblogs.net/johnteague/services/trackbacks/115957.aspx</trackback:ping>
    </entry>
    <entry>
        <title>My Rails Experience</title>
        <link rel="self" type="text/html" href="http://geekswithblogs.net/johnteague/archive/2007/10/08/starting-with-rails.aspx" />
        <id>http://geekswithblogs.net/johnteague/archive/2007/10/08/starting-with-rails.aspx</id>
        <published>2007-10-08T02:50:31-05:00:00</published>
        <updated>2007-10-08T02:50:31Z</updated>
        <content type="html">&lt;p&gt;So I've got this pet project of mine that I'm trying to work on in my spare time (hehehe).  I started this for several reasons, mainly I need an application that I can sink my teeth into.&lt;/p&gt;
&lt;p&gt;I've gone down several paths on how to implement it, from a Javascript view to MonoRail to a smart client.   I've finally settled down to using Ruby on Rails to do it.  This is the most ambitious choice given my utter lack of knowlege in Ruby and Rails.&lt;/p&gt;
&lt;p&gt;So most of my posts will be focused on what I'm learning in the process.  The first thing is the Migrations Rock!!  We have our own migration-ish nant task to some of what migrations give you.  Now I want to use migrations completely and wire it into our nant task.  Moving completely to Rake would be cool, but we have way too many assets in nant for us to make that switch.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;&lt;img src="http://geekswithblogs.net/johnteague/aggbug/115923.aspx" width="1" height="1" /&gt;</content>
        <wfw:comment>http://geekswithblogs.net/johnteague/comments/115923.aspx</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://geekswithblogs.net/johnteague/comments/commentRss/115923.aspx</wfw:commentRss>
        <trackback:ping>http://geekswithblogs.net/johnteague/services/trackbacks/115923.aspx</trackback:ping>
    </entry>
    <entry>
        <title>My Alt.Net Conference Experience</title>
        <link rel="self" type="text/html" href="http://geekswithblogs.net/johnteague/archive/2007/10/07/My-Altnetconf-Experience.aspx" />
        <id>http://geekswithblogs.net/johnteague/archive/2007/10/07/My-Altnetconf-Experience.aspx</id>
        <published>2007-10-07T15:24:37-05:00:00</published>
        <updated>2007-10-08T02:13:51Z</updated>
        <content type="html">So the Alt.Net Conference is over, and let me tell you it was an amazing experience.&lt;br /&gt;
&lt;br /&gt;
I've been reading some of the early reactions on the blogs and had some conversations over a great lunch after the conference.   Two of them that were not issues for me was the "Echo Chamber" and "Preaching to the Choir".  These are legitmate and if you've been doing this for a couple years and have the expertice like &lt;a href="http://codebetter.com/blogs/jeremy.miller/"&gt;Jeremy&lt;/a&gt;, &lt;a href="http://codebetter.com/blogs/jeffrey.palermo/default.aspx"&gt;Jeffrey&lt;/a&gt; or Scott Hanselman I can understand.&lt;br /&gt;
&lt;br /&gt;
But for these were not issues.  While I've been reading about these concepts for years and have been trying to use them in environments where it was not the norm or even appreciated, it was like physists going to a Nobel Prize luncheon.  I got to pick people's brain about the best practices, why is done this way and not another way, and hopefully avoid some pitfalls.&lt;br /&gt;
&lt;br /&gt;
The other thing that was great for me was the confirmation that I am not alone in the way I want to build software and the way I think it should be done.  For all of you who have been trying agile practices in an non-agile environment, I know you understand.&lt;img src="http://geekswithblogs.net/johnteague/aggbug/115910.aspx" width="1" height="1" /&gt;</content>
        <wfw:comment>http://geekswithblogs.net/johnteague/comments/115910.aspx</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://geekswithblogs.net/johnteague/comments/commentRss/115910.aspx</wfw:commentRss>
        <trackback:ping>http://geekswithblogs.net/johnteague/services/trackbacks/115910.aspx</trackback:ping>
    </entry>
    <entry>
        <title>Rhino Mock Troubleshooting Tips</title>
        <link rel="self" type="text/html" href="http://geekswithblogs.net/johnteague/archive/2007/09/03/Rhino-Mock-Troubleshooting-Tips.aspx" />
        <id>http://geekswithblogs.net/johnteague/archive/2007/09/03/Rhino-Mock-Troubleshooting-Tips.aspx</id>
        <published>2007-09-03T17:18:52-05:00:00</published>
        <updated>2007-10-07T15:15:23Z</updated>
        <content type="html">&lt;p&gt;When running this test&lt;/p&gt;
&lt;p&gt;&lt;font size="2" color="#2b91af"&gt;Sprint&lt;/font&gt;&lt;font size="2"&gt; s = &lt;/font&gt;&lt;font size="2" color="#0000ff"&gt;new&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font size="2" color="#2b91af"&gt;Sprint&lt;/font&gt;&lt;font size="2"&gt;();&lt;br /&gt;
&lt;/font&gt;&lt;font size="2" color="#2b91af"&gt;ValidationResult&lt;/font&gt;&lt;font size="2"&gt;&amp;lt;&lt;/font&gt;&lt;font size="2" color="#2b91af"&gt;Sprint&lt;/font&gt;&lt;font size="2"&gt;&amp;gt; result = &lt;/font&gt;&lt;font size="2" color="#0000ff"&gt;new&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font size="2" color="#2b91af"&gt;ValidationResult&lt;/font&gt;&lt;font size="2"&gt;&amp;lt;&lt;/font&gt;&lt;font size="2" color="#2b91af"&gt;Sprint&lt;/font&gt;&lt;font size="2"&gt;&amp;gt;();&lt;br /&gt;
result.Result = &lt;/font&gt;&lt;font size="2" color="#0000ff"&gt;true&lt;/font&gt;&lt;font size="2"&gt;; &lt;/font&gt;&lt;font size="2" color="#0000ff"&gt;using&lt;/font&gt;&lt;font size="2"&gt;(mocks.Unordered())&lt;br /&gt;
{&lt;br /&gt;
&lt;/font&gt;&lt;font size="2" color="#2b91af"&gt;Expect&lt;/font&gt;&lt;font size="2"&gt;.On(sprintRepository).Call(sprintRepository.Save(s)).Return(result);&lt;br /&gt;
&lt;/font&gt;&lt;font size="2" color="#2b91af"&gt;Expect&lt;/font&gt;&lt;font size="2"&gt;.On(view).Call(view.ErrorMessage).PropertyBehavior().Return(&lt;/font&gt;&lt;font size="2" color="#0000ff"&gt;string&lt;/font&gt;&lt;font size="2"&gt;.Empty);&lt;br /&gt;
}&lt;/font&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;mocks.ReplayAll();&lt;br /&gt;
presenter.SaveSprint();&lt;br /&gt;
mocks.VerifyAll();&lt;/p&gt;
&lt;p&gt;I ran across this exception &lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New"&gt;Rhino.Mocks.Exceptions.ExpectationViolationException: ISprintRepository.Save(SprintVelocity.Domain.Sprint); Expected #0, Actual #1.&lt;br /&gt;
ISprintRepository.Save(SprintVelocity.Domain.Sprint); Expected #1, Actual #0.&lt;/font&gt; &lt;/p&gt;
&lt;p&gt;I took some time to research this problem and I found some other interesting things in the process.  First of all the reason of this error is because of the Sprint object is different in the SaveSprint() method than the Sprint object in the test.  This was fixed by using the IgnoreArguments() method.  It's a rookie mistake, but hey someone got to own up to it so you can find the solution right. &lt;/p&gt;
&lt;p&gt;It's hard to tell that from the error messages, which leads into one of my discoveries while fixing this:&lt;/p&gt;
&lt;p&gt;Override the ToString method to get better messages.&lt;/p&gt;
&lt;p&gt;If I override ToString in the Sprint Class, the previous exception becomes this:&lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New"&gt;Rhino.Mocks.Exceptions.ExpectationViolationException: ISprintRepository.Update(Sprint: ID=0;ProjectId=1; Description=description; Start-Date:2007-09-04 00:09; End-Date=2007-09-04 14:09&lt;br /&gt;
); Expected #0, Actual #1.&lt;br /&gt;
ISprintRepository.Update(Sprint: ID=0;ProjectId=null; Description=; Start-Date:0001-01-01 00:00; End-Date=0001-01-01 00:00&lt;br /&gt;
); Expected #1, Actual #0.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;Now I know what is happening and how to fix it.&lt;/p&gt;
&lt;p&gt;The other new discovery is that you can put Rhino Logging messages into the output.  Add the following lines to you SetUp method and you will get Rhino Mocks logging messages in the console.&lt;/p&gt;
&lt;p&gt;  &lt;/p&gt;
&lt;p&gt; &lt;font size="-0" style="font-family: Courier New;"&gt; &lt;font size="2" color="#2b91af"&gt;  &lt;/font&gt; &lt;font size="2"&gt;.Logger = &lt;/font&gt;&lt;font size="2" color="#0000ff" style="font-family: Arial;"&gt;new&lt;/font&gt;&lt;font size="2" style="font-family: Arial;"&gt; &lt;/font&gt;&lt;font size="2" color="#2b91af" style="font-family: Arial;"&gt;TextWriterExpectationLogger&lt;/font&gt;&lt;font size="2" style="font-family: Arial;"&gt;(&lt;/font&gt;&lt;font size="2" color="#2b91af" style="font-family: Arial;"&gt;Console&lt;/font&gt;&lt;font size="2" style="font-family: Arial;"&gt;.Out);&lt;/font&gt;&lt;/font&gt;&lt;span style="font-family: Arial;"&gt;&lt;br /&gt;
Resharper's TestRunner puts this in the same output as the results, so it's easy to see where Rhino blew up.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New"&gt;Recorded expectation: ISprintRepository.Update(Sprint: ID=0;ProjectId=null; Description=; Start-Date:0001-01-01 00:00; End-Date=0001-01-01 00:00&lt;br /&gt;
);&lt;br /&gt;
Recorded expectation: ISprintFormView.get_ErrorMessage();&lt;br /&gt;
Unexpected method call error: ISprintRepository.Update(Sprint: ID=0;ProjectId=1; Description=description; Start-Date:2007-09-04 00:09; End-Date=2007-09-04 14:09&lt;br /&gt;
);&lt;/font&gt;&lt;/p&gt;
&lt;p&gt; Anyway, those are my Rhino Mock epiphanies for the week.  I hope they help someone else.&lt;/p&gt;
&lt;p&gt; Cheers,&lt;/p&gt;&lt;img src="http://geekswithblogs.net/johnteague/aggbug/115134.aspx" width="1" height="1" /&gt;</content>
        <wfw:comment>http://geekswithblogs.net/johnteague/comments/115134.aspx</wfw:comment>
        <slash:comments>1</slash:comments>
        <wfw:commentRss>http://geekswithblogs.net/johnteague/comments/commentRss/115134.aspx</wfw:commentRss>
        <trackback:ping>http://geekswithblogs.net/johnteague/services/trackbacks/115134.aspx</trackback:ping>
    </entry>
</feed>
