<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" version="2.0">
  <channel>
    <title>altinoren.com - TDD</title>
    <link>http://altinoren.com/</link>
    <description>Gokhan Altinoren's Blog and Projects</description>
    <language>en-us</language>
    <copyright>Gokhan Altinoren</copyright>
    <lastBuildDate>Tue, 04 Nov 2008 20:32:02 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 2.3.9074.18820</generator>
    <managingEditor>gokhan@altinoren.com</managingEditor>
    <webMaster>gokhan@altinoren.com</webMaster>
    <item>
      <trackback:ping>http://altinoren.com/Trackback.aspx?guid=2a6a5d82-4155-4f8d-ab18-9ffc354ad81e</trackback:ping>
      <pingback:server>http://altinoren.com/pingback.aspx</pingback:server>
      <pingback:target>http://altinoren.com/PermaLink,guid,2a6a5d82-4155-4f8d-ab18-9ffc354ad81e.aspx</pingback:target>
      <dc:creator>Gokhan Altinoren</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <b>
          <font color="#ff0000">Update</font>
        </b>:
Check the comment by <a href="http://mhinze.com/">Matt Hinze</a>. It appears that
we don't need this kind of complexity after Preview 4. Check <a href="http://stackoverflow.com/questions/58513/unit-testing-mvcnet-redirection#58818">this</a> and <a href="http://www.asp.net/learn/mvc/tutorial-07-cs.aspx">this</a>,
for example. Thanks Matt. My lesson? When you're using pre-release software with lots
of changes and improvements in each release, be sure to reevaluate all your past assumptions
in each.<br /><br />
--<br /><br />
Just a note. I use a base like this code to avoid repetitive test setup when testing
MVC controllers.<br /><br /><style type="text/css">
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: Consolas, "Courier New", Courier, Monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}

.csharpcode pre { margin: 0em; }

.csharpcode .rem { color: #008000; }

.csharpcode .kwrd { color: #0000ff; }

.csharpcode .str { color: #006080; }

.csharpcode .op { color: #0000c0; }

.csharpcode .preproc { color: #cc6633; }

.csharpcode .asp { background-color: #ffff00; }

.csharpcode .html { color: #800000; }

.csharpcode .attr { color: #ff0000; }

.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}

.csharpcode .lnum { color: #606060; }
</style><div class="csharpcode"><pre class="alt"><span class="kwrd">using</span> System;</pre><pre><span class="kwrd">using</span> System.Web;</pre><pre class="alt"><span class="kwrd">using</span> System.Web.Mvc;</pre><pre><span class="kwrd">using</span> System.Web.Routing;</pre><pre class="alt"><span class="kwrd">using</span> MbUnit.Framework;</pre><pre><span class="kwrd">using</span> Rhino.Commons;</pre><pre class="alt"><span class="kwrd">using</span> Rhino.Mocks;</pre><pre> </pre><pre class="alt"><span class="kwrd">public</span><span class="kwrd">abstract</span><span class="kwrd">class</span> ControllerTestBase&lt;TController&gt; </pre><pre><span class="kwrd">where</span> TController : Controller</pre><pre class="alt">    {</pre><pre><span class="kwrd">protected</span> TController controller;</pre><pre class="alt"><span class="kwrd">protected</span> ControllerContext controllerContext;</pre><pre><span class="kwrd">protected</span> IDisposable disposeGlobalUnitOfWorkRegistration;</pre><pre class="alt"><span class="kwrd">protected</span> HttpContextBase httpContextStub;</pre><pre><span class="kwrd">protected</span> HttpSessionStateBase httpSessionStub;</pre><pre class="alt"><span class="kwrd">protected</span> IUnitOfWork unitOfWorkStub;</pre><pre> </pre><pre class="alt">        [SetUp]</pre><pre><span class="kwrd">public</span><span class="kwrd">virtual</span><span class="kwrd">void</span> Setup()</pre><pre class="alt">        {</pre><pre>            SetupController();</pre><pre class="alt"> </pre><pre>            unitOfWorkStub = MockRepository.GenerateStub&lt;IUnitOfWork&gt;();</pre><pre class="alt">            httpContextStub = MockRepository.GenerateStub&lt;HttpContextBase&gt;();</pre><pre>            httpSessionStub = MockRepository.GenerateStub&lt;HttpSessionStateBase&gt;();</pre><pre class="alt">            httpContextStub.Stub(x =&gt; x.Session).Return(httpSessionStub);</pre><pre>            var httpRequestStub = MockRepository.GenerateStub&lt;HttpRequestBase&gt;();</pre><pre class="alt">            httpContextStub.Stub(x =&gt; x.Request).Return(httpRequestStub);</pre><pre>            controllerContext = <span class="kwrd">new</span> ControllerContext(httpContextStub, <span class="kwrd">new</span> RouteData(),
controller);</pre><pre class="alt">            controller.ControllerContext = controllerContext;</pre><pre>            disposeGlobalUnitOfWorkRegistration = UnitOfWork.RegisterGlobalUnitOfWork(unitOfWorkStub);</pre><pre class="alt">        }</pre><pre> </pre><pre class="alt"><span class="kwrd">protected</span><span class="kwrd">abstract</span><span class="kwrd">void</span> SetupController();</pre><pre> </pre><pre class="alt">        [TearDown]</pre><pre><span class="kwrd">public</span><span class="kwrd">void</span> TearDown()</pre><pre class="alt">        {</pre><pre>            disposeGlobalUnitOfWorkRegistration.Dispose();</pre><pre class="alt">        }</pre><pre>    }</pre></div><br /><br />
Then...<br /><br /><br /><div class="csharpcode"><pre class="alt"><span class="kwrd">using</span> System.Web.Mvc;</pre><pre><span class="kwrd">using</span> Common;</pre><pre class="alt"><span class="kwrd">using</span> Core.Authentication;</pre><pre><span class="kwrd">using</span> Core.Repositories;</pre><pre class="alt"><span class="kwrd">using</span> Domain.Entities;</pre><pre><span class="kwrd">using</span> MbUnit.Framework;</pre><pre class="alt"><span class="kwrd">using</span> Rhino.Commons;</pre><pre><span class="kwrd">using</span> Rhino.Mocks;</pre><pre class="alt"><span class="kwrd">using</span> UI.Controllers;</pre><pre><span class="kwrd">using</span> UI.Properties;</pre><pre class="alt"> </pre><pre>    [TestFixture]</pre><pre class="alt"><span class="kwrd">public</span><span class="kwrd">class</span> RegisterControllerTests
: ControllerTestBase&lt;RegisterController&gt;</pre><pre>    {</pre><pre class="alt"><span class="kwrd">private</span> IRepository&lt;User&gt;
repositoryStub;</pre><pre><span class="kwrd">private</span> IAuthenticationService authServiceStub;</pre><pre class="alt"> </pre><pre><span class="kwrd">protected</span><span class="kwrd">override</span><span class="kwrd">void</span> SetupController()</pre><pre class="alt">        {</pre><pre>            repositoryStub = MockRepository.GenerateStub&lt;UserRepository&gt;();</pre><pre class="alt">            authServiceStub = MockRepository.GenerateStub&lt;IAuthenticationService&gt;();</pre><pre>            controller = <span class="kwrd">new</span> RegisterController(repositoryStub,
authServiceStub);</pre><pre class="alt">        }</pre><pre> </pre><pre class="alt">        [Test]</pre><pre><span class="kwrd">public</span><span class="kwrd">void</span> Will_display_error_message_if_logged_in()</pre><pre class="alt">        {</pre><pre>            authServiceStub.Stub(c =&gt; c.IsAuthenticated()).Return(<span class="kwrd">true</span>);</pre><pre class="alt">            var result = controller.Index() <span class="kwrd">as</span> RedirectToRouteResult;</pre><pre>            Assert.IsNotNull(result);</pre><pre class="alt">            var message = controller.TempData[<span class="str">"Message"</span>] <span class="kwrd">as</span><span class="kwrd">string</span>;</pre><pre>            Assert.IsFalse(<span class="kwrd">string</span>.IsNullOrEmpty(message));</pre><pre class="alt">            Assert.AreEqual(GlobalResources.CannotRegisterAlreadyRegistered, message);</pre><pre>            Assert.AreEqual(result.Values[<span class="str">"action"</span>], <span class="str">"Index"</span>);</pre><pre class="alt">            Assert.AreEqual(result.Values[<span class="str">"controller"</span>], <span class="str">"Message"</span>);</pre><pre>        }</pre><pre class="alt">    }</pre></div><img width="0" height="0" src="http://altinoren.com/aggbug.ashx?id=2a6a5d82-4155-4f8d-ab18-9ffc354ad81e" /></body>
      <title>Base for testing ASP.NET MVC controllers</title>
      <guid isPermaLink="false">http://altinoren.com/PermaLink,guid,2a6a5d82-4155-4f8d-ab18-9ffc354ad81e.aspx</guid>
      <link>http://altinoren.com/PermaLink,guid,2a6a5d82-4155-4f8d-ab18-9ffc354ad81e.aspx</link>
      <pubDate>Tue, 04 Nov 2008 20:32:02 GMT</pubDate>
      <description>&lt;b&gt;&lt;font color="#ff0000"&gt;Update&lt;/font&gt;&lt;/b&gt;: Check the comment by &lt;a href="http://mhinze.com/"&gt;Matt
Hinze&lt;/a&gt;. It appears that we don't need this kind of complexity after Preview 4.
Check &lt;a href="http://stackoverflow.com/questions/58513/unit-testing-mvcnet-redirection#58818"&gt;this&lt;/a&gt; and &lt;a href="http://www.asp.net/learn/mvc/tutorial-07-cs.aspx"&gt;this&lt;/a&gt;,
for example. Thanks Matt. My lesson? When you're using pre-release software with lots
of changes and improvements in each release, be sure to reevaluate all your past assumptions
in each.&lt;br&gt;
&lt;br&gt;
--&lt;br&gt;
&lt;br&gt;
Just a note. I use a base like this code to avoid repetitive test setup when testing
MVC controllers.&lt;br&gt;
&lt;br&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: Consolas, "Courier New", Courier, Monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}

.csharpcode pre { margin: 0em; }

.csharpcode .rem { color: #008000; }

.csharpcode .kwrd { color: #0000ff; }

.csharpcode .str { color: #006080; }

.csharpcode .op { color: #0000c0; }

.csharpcode .preproc { color: #cc6633; }

.csharpcode .asp { background-color: #ffff00; }

.csharpcode .html { color: #800000; }

.csharpcode .attr { color: #ff0000; }

.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}

.csharpcode .lnum { color: #606060; }
&lt;/style&gt;
&lt;div class="csharpcode"&gt;
&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;using&lt;/span&gt; System;&lt;/pre&gt;
&lt;pre&gt;    &lt;span class="kwrd"&gt;using&lt;/span&gt; System.Web;&lt;/pre&gt;
&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;using&lt;/span&gt; System.Web.Mvc;&lt;/pre&gt;
&lt;pre&gt;    &lt;span class="kwrd"&gt;using&lt;/span&gt; System.Web.Routing;&lt;/pre&gt;
&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;using&lt;/span&gt; MbUnit.Framework;&lt;/pre&gt;
&lt;pre&gt;    &lt;span class="kwrd"&gt;using&lt;/span&gt; Rhino.Commons;&lt;/pre&gt;
&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;using&lt;/span&gt; Rhino.Mocks;&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;abstract&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; ControllerTestBase&amp;lt;TController&amp;gt; &lt;/pre&gt;
&lt;pre&gt;        &lt;span class="kwrd"&gt;where&lt;/span&gt; TController : Controller&lt;/pre&gt;
&lt;pre class="alt"&gt;    {&lt;/pre&gt;
&lt;pre&gt;        &lt;span class="kwrd"&gt;protected&lt;/span&gt; TController controller;&lt;/pre&gt;
&lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;protected&lt;/span&gt; ControllerContext controllerContext;&lt;/pre&gt;
&lt;pre&gt;        &lt;span class="kwrd"&gt;protected&lt;/span&gt; IDisposable disposeGlobalUnitOfWorkRegistration;&lt;/pre&gt;
&lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;protected&lt;/span&gt; HttpContextBase httpContextStub;&lt;/pre&gt;
&lt;pre&gt;        &lt;span class="kwrd"&gt;protected&lt;/span&gt; HttpSessionStateBase httpSessionStub;&lt;/pre&gt;
&lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;protected&lt;/span&gt; IUnitOfWork unitOfWorkStub;&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class="alt"&gt;        [SetUp]&lt;/pre&gt;
&lt;pre&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;virtual&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Setup()&lt;/pre&gt;
&lt;pre class="alt"&gt;        {&lt;/pre&gt;
&lt;pre&gt;            SetupController();&lt;/pre&gt;
&lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;            unitOfWorkStub = MockRepository.GenerateStub&amp;lt;IUnitOfWork&amp;gt;();&lt;/pre&gt;
&lt;pre class="alt"&gt;            httpContextStub = MockRepository.GenerateStub&amp;lt;HttpContextBase&amp;gt;();&lt;/pre&gt;
&lt;pre&gt;            httpSessionStub = MockRepository.GenerateStub&amp;lt;HttpSessionStateBase&amp;gt;();&lt;/pre&gt;
&lt;pre class="alt"&gt;            httpContextStub.Stub(x =&amp;gt; x.Session).Return(httpSessionStub);&lt;/pre&gt;
&lt;pre&gt;            var httpRequestStub = MockRepository.GenerateStub&amp;lt;HttpRequestBase&amp;gt;();&lt;/pre&gt;
&lt;pre class="alt"&gt;            httpContextStub.Stub(x =&amp;gt; x.Request).Return(httpRequestStub);&lt;/pre&gt;
&lt;pre&gt;            controllerContext = &lt;span class="kwrd"&gt;new&lt;/span&gt; ControllerContext(httpContextStub, &lt;span class="kwrd"&gt;new&lt;/span&gt; RouteData(),
controller);&lt;/pre&gt;
&lt;pre class="alt"&gt;            controller.ControllerContext = controllerContext;&lt;/pre&gt;
&lt;pre&gt;            disposeGlobalUnitOfWorkRegistration = UnitOfWork.RegisterGlobalUnitOfWork(unitOfWorkStub);&lt;/pre&gt;
&lt;pre class="alt"&gt;        }&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;abstract&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; SetupController();&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class="alt"&gt;        [TearDown]&lt;/pre&gt;
&lt;pre&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; TearDown()&lt;/pre&gt;
&lt;pre class="alt"&gt;        {&lt;/pre&gt;
&lt;pre&gt;            disposeGlobalUnitOfWorkRegistration.Dispose();&lt;/pre&gt;
&lt;pre class="alt"&gt;        }&lt;/pre&gt;
&lt;pre&gt;    }&lt;/pre&gt;
&lt;/div&gt;
&lt;br&gt;
&lt;br&gt;
Then...&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;div class="csharpcode"&gt;
&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;using&lt;/span&gt; System.Web.Mvc;&lt;/pre&gt;
&lt;pre&gt;    &lt;span class="kwrd"&gt;using&lt;/span&gt; Common;&lt;/pre&gt;
&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;using&lt;/span&gt; Core.Authentication;&lt;/pre&gt;
&lt;pre&gt;    &lt;span class="kwrd"&gt;using&lt;/span&gt; Core.Repositories;&lt;/pre&gt;
&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;using&lt;/span&gt; Domain.Entities;&lt;/pre&gt;
&lt;pre&gt;    &lt;span class="kwrd"&gt;using&lt;/span&gt; MbUnit.Framework;&lt;/pre&gt;
&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;using&lt;/span&gt; Rhino.Commons;&lt;/pre&gt;
&lt;pre&gt;    &lt;span class="kwrd"&gt;using&lt;/span&gt; Rhino.Mocks;&lt;/pre&gt;
&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;using&lt;/span&gt; UI.Controllers;&lt;/pre&gt;
&lt;pre&gt;    &lt;span class="kwrd"&gt;using&lt;/span&gt; UI.Properties;&lt;/pre&gt;
&lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;    [TestFixture]&lt;/pre&gt;
&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; RegisterControllerTests
: ControllerTestBase&amp;lt;RegisterController&amp;gt;&lt;/pre&gt;
&lt;pre&gt;    {&lt;/pre&gt;
&lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; IRepository&amp;lt;User&amp;gt;
repositoryStub;&lt;/pre&gt;
&lt;pre&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; IAuthenticationService authServiceStub;&lt;/pre&gt;
&lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;        &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; SetupController()&lt;/pre&gt;
&lt;pre class="alt"&gt;        {&lt;/pre&gt;
&lt;pre&gt;            repositoryStub = MockRepository.GenerateStub&amp;lt;UserRepository&amp;gt;();&lt;/pre&gt;
&lt;pre class="alt"&gt;            authServiceStub = MockRepository.GenerateStub&amp;lt;IAuthenticationService&amp;gt;();&lt;/pre&gt;
&lt;pre&gt;            controller = &lt;span class="kwrd"&gt;new&lt;/span&gt; RegisterController(repositoryStub,
authServiceStub);&lt;/pre&gt;
&lt;pre class="alt"&gt;        }&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class="alt"&gt;        [Test]&lt;/pre&gt;
&lt;pre&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Will_display_error_message_if_logged_in()&lt;/pre&gt;
&lt;pre class="alt"&gt;        {&lt;/pre&gt;
&lt;pre&gt;            authServiceStub.Stub(c =&amp;gt; c.IsAuthenticated()).Return(&lt;span class="kwrd"&gt;true&lt;/span&gt;);&lt;/pre&gt;
&lt;pre class="alt"&gt;            var result = controller.Index() &lt;span class="kwrd"&gt;as&lt;/span&gt; RedirectToRouteResult;&lt;/pre&gt;
&lt;pre&gt;            Assert.IsNotNull(result);&lt;/pre&gt;
&lt;pre class="alt"&gt;            var message = controller.TempData[&lt;span class="str"&gt;"Message"&lt;/span&gt;] &lt;span class="kwrd"&gt;as&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt;;&lt;/pre&gt;
&lt;pre&gt;            Assert.IsFalse(&lt;span class="kwrd"&gt;string&lt;/span&gt;.IsNullOrEmpty(message));&lt;/pre&gt;
&lt;pre class="alt"&gt;            Assert.AreEqual(GlobalResources.CannotRegisterAlreadyRegistered, message);&lt;/pre&gt;
&lt;pre&gt;            Assert.AreEqual(result.Values[&lt;span class="str"&gt;"action"&lt;/span&gt;], &lt;span class="str"&gt;"Index"&lt;/span&gt;);&lt;/pre&gt;
&lt;pre class="alt"&gt;            Assert.AreEqual(result.Values[&lt;span class="str"&gt;"controller"&lt;/span&gt;], &lt;span class="str"&gt;"Message"&lt;/span&gt;);&lt;/pre&gt;
&lt;pre&gt;        }&lt;/pre&gt;
&lt;pre class="alt"&gt;    }&lt;/pre&gt;
&lt;/div&gt;
&lt;img width="0" height="0" src="http://altinoren.com/aggbug.ashx?id=2a6a5d82-4155-4f8d-ab18-9ffc354ad81e" /&gt;</description>
      <category>MVC</category>
      <category>Rhino Stack</category>
      <category>TDD</category>
    </item>
    <item>
      <trackback:ping>http://altinoren.com/Trackback.aspx?guid=a530ffb1-34d1-49f8-a093-888d6354e91a</trackback:ping>
      <pingback:server>http://altinoren.com/pingback.aspx</pingback:server>
      <pingback:target>http://altinoren.com/PermaLink,guid,a530ffb1-34d1-49f8-a093-888d6354e91a.aspx</pingback:target>
      <dc:creator>Gokhan Altinoren</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">Just for the fun :)<br /><p></p><img src="http://altinoren.com/content/binary/tddoang.png" border="0" /><br /><br />
Download: <a href="http://altinoren.com/content/binary/TDDOANG.pdf">TDDOANG.pdf (734.42
KB)</a><br /><br />
Notes:<br /><ul><li>
Yeah. I know it's not complete / 100% accurate.</li><li>
Yep. There are other tools, I know.<br /></li><li>
Yes, Alt.Net is not the authority. But it's the most active community in MS ecosystem
right now where you can ask questions on TDD.<br /></li></ul><img width="0" height="0" src="http://altinoren.com/aggbug.ashx?id=a530ffb1-34d1-49f8-a093-888d6354e91a" /></body>
      <title>TDD Poster - IKEA Style</title>
      <guid isPermaLink="false">http://altinoren.com/PermaLink,guid,a530ffb1-34d1-49f8-a093-888d6354e91a.aspx</guid>
      <link>http://altinoren.com/PermaLink,guid,a530ffb1-34d1-49f8-a093-888d6354e91a.aspx</link>
      <pubDate>Sat, 01 Dec 2007 11:29:37 GMT</pubDate>
      <description>Just for the fun :)&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img src="http://altinoren.com/content/binary/tddoang.png" border="0"&gt;
&lt;br&gt;
&lt;br&gt;
Download: &lt;a href="http://altinoren.com/content/binary/TDDOANG.pdf"&gt;TDDOANG.pdf (734.42
KB)&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
Notes:&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
Yeah. I know it's not complete / 100% accurate.&lt;/li&gt;
&lt;li&gt;
Yep. There are other tools, I know.&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;
Yes, Alt.Net is not the authority. But it's the most active community in MS ecosystem
right now where you can ask questions on TDD.&lt;br&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;img width="0" height="0" src="http://altinoren.com/aggbug.ashx?id=a530ffb1-34d1-49f8-a093-888d6354e91a" /&gt;</description>
      <category>TDD</category>
    </item>
  </channel>
</rss>