<rss version="2.0" 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:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>MbUnit</title>
        <link>http://geekswithblogs.net/malloc/category/6445.aspx</link>
        <description>MbUnit</description>
        <language>en-US</language>
        <copyright>malloc();</copyright>
        <managingEditor>malloc@gmail.com</managingEditor>
        <generator>Subtext Version 0.0.0.0</generator>
        <item>
            <title>xUnit Test Patterns: Refactoring Test Code</title>
            <link>http://geekswithblogs.net/malloc/archive/2007/06/10/xUnit-Test-Patterns-Refactoring-Test-Code.aspx</link>
            <description>&lt;p&gt;I already had the book &lt;a href="http://www.amazon.com/xUnit-Test-Patterns-Refactoring-Addison-Wesley/dp/0131495054"&gt;xUnit Test Patterns: Refactoring Test Code&lt;/a&gt;  on my Amazon wishlist. But after reading Sam Gentile's &lt;a href="http://codebetter.com/blogs/sam.gentile/archive/2007/06/10/xunit-test-patterns-and-evolving-tdd-and-test-automation.aspx"&gt;xUnit Test Patterns and evolving TDD and test automation&lt;/a&gt; post today about the book and its topics I've decided to go ahead and order it now. I still have 3 books that I am currently reading ( &lt;a href="http://www.amazon.com/Inside-Microsoft-Server-2005-Pro-Developer/dp/0735621977/ref=pd_bbs_sr_2/103-6386287-3321406?ie=UTF8&amp;amp;s=books&amp;amp;qid=1181525924&amp;amp;sr=8-2"&gt;1&lt;/a&gt;, &lt;a href="http://www.amazon.com/Complete-Book-Long-Distance-Cycling-Confidence/dp/1579541992/ref=pd_bbs_sr_1/103-6386287-3321406?ie=UTF8&amp;amp;s=books&amp;amp;qid=1181525966&amp;amp;sr=8-1"&gt;2&lt;/a&gt;, &lt;a href="http://www.amazon.com/gp/product/1590597028/ref=wl_it_dp/103-6386287-3321406?ie=UTF8&amp;amp;coliid=I2E5IZKGCVQ92A&amp;amp;colid=3BN83CDTJFRN9"&gt;3&lt;/a&gt; ) but this will jump to the front of the line when it arrives. &lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;p&gt;EOF&lt;/p&gt; &lt;div class="wlWriterSmartContent" id="0767317B-992E-4b12-91E0-4F059A8CECA8:51582366-ce08-44f9-83b0-e00478a4666f" contenteditable="false" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati tags: &lt;a href="http://technorati.com/tags/TDD" rel="tag"&gt;TDD&lt;/a&gt;, &lt;a href="http://technorati.com/tags/xUnit" rel="tag"&gt;xUnit&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Test%20Patterns" rel="tag"&gt;Test Patterns&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=113139"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=113139" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/malloc/aggbug/113139.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>malloc();</dc:creator>
            <guid>http://geekswithblogs.net/malloc/archive/2007/06/10/xUnit-Test-Patterns-Refactoring-Test-Code.aspx</guid>
            <pubDate>Sun, 10 Jun 2007 23:46:03 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/malloc/comments/113139.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/malloc/archive/2007/06/10/xUnit-Test-Patterns-Refactoring-Test-Code.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/malloc/comments/commentRss/113139.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/malloc/services/trackbacks/113139.aspx</trackback:ping>
        </item>
        <item>
            <title>MbUnit 2.4</title>
            <link>http://geekswithblogs.net/malloc/archive/2007/05/26/MbUnit-2.4.aspx</link>
            <description>&lt;p&gt;Thanks to &lt;a href="http://weblogs.asp.net/astopford/"&gt;Andrew Stopford&lt;/a&gt; and everyone else who works on MbUnit development. &lt;a href="http://weblogs.asp.net/astopford/archive/2007/05/24/mbunit-2-4-rtm.aspx"&gt;MbUnit 2.4 was just released&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;If you are not unit testing or practicing TDD in your projects, I don't know how you could choose plain old NUnit over MbUnit. If you are using regular NUnit it is very simple to convert your projects MbUnit, they use the same [Test] attribute. &lt;/p&gt; &lt;p&gt;MbUnit has:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Row Testing:  &lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4"&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;[RowTest]
[Row(&lt;span style="color: #006080"&gt;"Hello"&lt;/span&gt;)]
[Row(&lt;span style="color: #006080"&gt;"Goodbye"&lt;/span&gt;)]
&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; TestString( &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; myString )
{
    &lt;span style="color: #008000"&gt;// do your tests in here...&lt;/span&gt;
}&lt;/pre&gt;&lt;/div&gt;More row testing details &lt;a href="http://haacked.com/archive/2004/10/20/Row_Based_Testing.aspx"&gt;here&lt;/a&gt;. 
&lt;/li&gt;&lt;li&gt;&lt;a href="http://haacked.com/archive/2007/05/10/productive-unit-testing-with-specialized-assertion-classes-in-mbunit.aspx"&gt;Specialized Assertions&lt;/a&gt; 
&lt;/li&gt;&lt;li&gt;Database rollback. The unit testing gods say that there should be absolutly no DB access in unit tests, but there are some times when I cannot avoid it. With the rollback attribute I don't have to worry about cleaning up the database after my test runs 
&lt;/li&gt;&lt;li&gt;Being able to test private methods. (see Vadim Kreynin's articles &lt;a href="http://vadim-net.blogspot.com/2007/04/testing-non-public-members-with-mbunit.html"&gt;here&lt;/a&gt; and &lt;a href="http://vadim-net.blogspot.com/2007/04/testing-non-public-members-with-mbunit_29.html"&gt;here&lt;/a&gt;). *
&lt;/li&gt;&lt;li&gt;&lt;a href="http://haacked.com/archive/2007/04/27/extract-embedded-resources-with-an-attribute-in-mbunit.aspx"&gt;Extract Embedded Resources With An Attribute In MbUnit&lt;/a&gt;. No more dealing with test file directories or setting the correct path in the [SetUp] methods!
&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.mertner.com/confluence/display/MbUnit/RepeatAttribute"&gt;RepeatAttribute&lt;/a&gt;. Run a specific test multiple times in a row.
&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.mertner.com/confluence/display/MbUnit/ThreadedRepeatAttribute"&gt;ThreadedRepeatAttribute&lt;/a&gt;. Run a specific test on multiple threads.
&lt;/li&gt;&lt;li&gt;etc. &lt;a title="http://www.mbunit.com/" href="http://www.mbunit.com/"&gt;http://www.mbunit.com/&lt;/a&gt; for all the details.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt; * I have been using the &lt;a href="http://msdn2.microsoft.com/en-us/library/system.runtime.compilerservices.internalsvisibletoattribute.aspx"&gt;InternalsVisibleTo&lt;/a&gt; assembly attribute to accomplish this for a little while now. It gets the job done nicely and has allowed complete separation of our unit tests into a separate assembly. It does require you to change method signatures to &lt;font color="#0000ff"&gt;internal&lt;/font&gt; instead of &lt;font color="#0000ff"&gt;private&lt;/font&gt;, OO purists might feel dirty doing this. Derik Whittaker had a good &lt;a href="http://devlicio.us/blogs/derik_whittaker/archive/2007/04/09/internalsvisibleto-testing-internal-methods-in-net-2-0.aspx"&gt;example&lt;/a&gt; on how the attribute should be used.&lt;/p&gt;
&lt;p&gt;EOF&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="0767317B-992E-4b12-91E0-4F059A8CECA8:12c7f14b-dc95-4613-bc41-8c6f65f86adb" contenteditable="false" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati tags: &lt;a href="http://technorati.com/tags/MbUnit" rel="tag"&gt;MbUnit&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Unit%20Testing" rel="tag"&gt;Unit Testing&lt;/a&gt;, &lt;a href="http://technorati.com/tags/TDD" rel="tag"&gt;TDD&lt;/a&gt;, &lt;a href="http://technorati.com/tags/.NET" rel="tag"&gt;.NET&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=112783"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=112783" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/malloc/aggbug/112783.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>malloc();</dc:creator>
            <guid>http://geekswithblogs.net/malloc/archive/2007/05/26/MbUnit-2.4.aspx</guid>
            <pubDate>Sun, 27 May 2007 00:13:41 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/malloc/comments/112783.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/malloc/archive/2007/05/26/MbUnit-2.4.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/malloc/comments/commentRss/112783.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/malloc/services/trackbacks/112783.aspx</trackback:ping>
        </item>
    </channel>
</rss>