<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Adventures of an aspiring agile developer in a not-quite agile world : xUnit.net</title><link>http://blogs.msdn.com/agilemonkey/archive/tags/xUnit.net/default.aspx</link><description>Tags: xUnit.net</description><dc:language>en-CA</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>One step past Assert.Throws&lt;&gt;</title><link>http://blogs.msdn.com/agilemonkey/archive/2008/07/29/one-step-past-assert-throws.aspx</link><pubDate>Tue, 29 Jul 2008 19:16:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8789288</guid><dc:creator>casper</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/agilemonkey/comments/8789288.aspx</comments><wfw:commentRss>http://blogs.msdn.com/agilemonkey/commentrss.aspx?PostID=8789288</wfw:commentRss><wfw:comment>http://blogs.msdn.com/agilemonkey/rsscomments.aspx?PostID=8789288</wfw:comment><description>&lt;P&gt;If you’re not using &lt;A class="" href="http://codeplex.com/xunit" mce_href="http://codeplex.com/xunit"&gt;xUnit&lt;/A&gt; (and you should be), at least consider adopting the practices they have for dealing with exceptions in unit tests. From the very first release, they moved us from this:&lt;/P&gt;&lt;CODE&gt;[ExpectedException(typeof(InvalidOperationException))] &lt;BR&gt;public void WithdrawingMoreThanBalanceThrows() &lt;BR&gt;{ &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Account account = new Account(); &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; account.Deposit(100); &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; account.Widthraw(200); &lt;BR&gt;}&lt;/CODE&gt; 
&lt;P&gt;to the far-better:&lt;/P&gt;
&lt;P&gt;&lt;CODE&gt;public void WithdrawingMoreThanBalanceThrows() &lt;BR&gt;{ &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Account account = new Account(); &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; account.Deposit(100); &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Assert.Throws&amp;lt;InvalidOperationException&amp;gt;(delegate &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; account.Widthraw(200);&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; });&lt;/CODE&gt;&lt;CODE&gt; &lt;BR&gt;}&lt;/CODE&gt;&lt;/P&gt;
&lt;P&gt;But we’re still not following the 3 As pattern. Recently (not sure exactly when) they took us one step further to this (in 3.5 syntax):&lt;/P&gt;
&lt;P&gt;&lt;CODE&gt;public void WithdrawingMoreThanBalanceThrows() &lt;BR&gt;{ &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Account account = new Account(); &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; account.Deposit(100); &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Exception ex = Record.Exception(() =&amp;gt; account.Widthraw(200)); &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ex.ShouldBeType&amp;lt;InvalidOperationException&amp;gt;();&lt;/CODE&gt;&lt;CODE&gt; &lt;BR&gt;}&lt;/CODE&gt;&lt;/P&gt;
&lt;P&gt;and now we are exactly where we should be :)&lt;/P&gt;
&lt;P&gt;(I was just told that &lt;CODE&gt;() =&amp;gt;&lt;/CODE&gt; is called the ‘crotch operator’ today. Can’t wait to use that in a code review.)&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8789288" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/agilemonkey/archive/tags/EDD_2F00_TDD/default.aspx">EDD/TDD</category><category domain="http://blogs.msdn.com/agilemonkey/archive/tags/xUnit.net/default.aspx">xUnit.net</category></item><item><title>ReSharper and xUnit.net</title><link>http://blogs.msdn.com/agilemonkey/archive/2007/10/03/playing-tricks-on-resharper.aspx</link><pubDate>Wed, 03 Oct 2007 10:10:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:5256357</guid><dc:creator>casper</dc:creator><slash:comments>5</slash:comments><comments>http://blogs.msdn.com/agilemonkey/comments/5256357.aspx</comments><wfw:commentRss>http://blogs.msdn.com/agilemonkey/commentrss.aspx?PostID=5256357</wfw:commentRss><wfw:comment>http://blogs.msdn.com/agilemonkey/rsscomments.aspx?PostID=5256357</wfw:comment><description>
&lt;p&gt;Those of you who have switched over to xUnit.Net may have a received a nasty surprise with the 'type members layout' feature of ReSharper: it doesn't respect method attributes. Namely, you can tell it to not reorder methods in an NUnit fixture like this:&amp;nbsp; &lt;/p&gt;

&lt;pre&gt;&amp;lt;Pattern&amp;gt;&amp;nbsp;&amp;nbsp; &lt;br&gt; &amp;lt;Match&amp;gt;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;HasAttribute CLRName="NUnit.Framework.TestFixture"/&amp;gt;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp; &amp;lt;/Match&amp;gt;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;lt;/Pattern&amp;gt;&lt;/pre&gt;
&lt;p&gt;But you &lt;b&gt;cannot&lt;/b&gt; tell it to not reorder your xUnit methods like this:&amp;nbsp;&amp;nbsp; &lt;/p&gt;

&lt;pre&gt;&amp;lt;Pattern&amp;gt; &lt;br&gt;    &amp;nbsp;&amp;nbsp; &amp;lt;Match&amp;gt; &lt;br&gt;    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;And Weight="100"&amp;gt; &lt;br&gt;    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Kind Is="method"/&amp;gt; &lt;br&gt;    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;HasAttribute CLRName="Xunit.TestAttribute" Inherit="false"/&amp;gt; &lt;br&gt;    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/And&amp;gt; &lt;br&gt;    &amp;nbsp;&amp;nbsp; &amp;lt;/Match&amp;gt; &lt;br&gt;&amp;lt;/Pattern&amp;gt;
&lt;/pre&gt;Apparently it will only look for attributes on classes and interfaces. In the meantime, I think the simplest solution is to just create a fake attribute you can add to your fixture.&amp;nbsp; 
&lt;pre&gt;public class ReSharperNoReorderAttribute : Attribute &lt;br&gt;{ &lt;br&gt;}
&lt;/pre&gt;And the appropriate pattern match to ReSharper: 
&lt;pre&gt;&amp;lt;Pattern&amp;gt;&lt;br&gt;     &amp;nbsp; &amp;lt;Match&amp;gt; &lt;br&gt;    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;HasAttribute CLRName="ReSharperNoReorder"/&amp;gt; &lt;br&gt;    &amp;nbsp; &amp;lt;/Match&amp;gt; &lt;br&gt;&amp;lt;/Pattern&amp;gt;&lt;/pre&gt;All should be well after that.&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=5256357" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/agilemonkey/archive/tags/xUnit.net/default.aspx">xUnit.net</category></item><item><title>Weaving with xUnit.net</title><link>http://blogs.msdn.com/agilemonkey/archive/2007/09/27/weaving-with-xunit-net.aspx</link><pubDate>Thu, 27 Sep 2007 13:00:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:5164441</guid><dc:creator>casper</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/agilemonkey/comments/5164441.aspx</comments><wfw:commentRss>http://blogs.msdn.com/agilemonkey/commentrss.aspx?PostID=5164441</wfw:commentRss><wfw:comment>http://blogs.msdn.com/agilemonkey/rsscomments.aspx?PostID=5164441</wfw:comment><description>&lt;p&gt;There has been mixed reaction to the removal of &lt;code&gt;[SetUp]&lt;/code&gt; and &lt;code&gt;[TearDown]&lt;/code&gt; in xUnit.net. Personally, I think it's great as it helps to raise unit test 'smells', particularly around how classes interact with each another. Here's a small example of how we can use the &lt;code&gt;BeforeAfterTestAttribute&lt;/code&gt; in xUnit to remove duplicate code. (It's based on the security workaround I talked about &lt;a href="http://blogs.msdn.com/agilemonkey/archive/2007/09/26/faking-out-principalpermission.aspx" mce_href="http://blogs.msdn.com/agilemonkey/archive/2007/09/26/faking-out-principalpermission.aspx"&gt;yesterday&lt;/a&gt;.)&lt;/p&gt;
&lt;p&gt;Instead of repeating three lines of code in each unit test to update the current identity, we can just define an attribute like &lt;code&gt;[AssumeIdentity]&lt;/code&gt; that will take care of things for us. Here's the little fixture I wrote to test it.&lt;/p&gt;&lt;pre&gt;&lt;p&gt;public class AssumeIdentityAttributeFixture &lt;br&gt;{ &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [Test] &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void CallingSecuredMethodWillThrow() &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Assert.Throws&amp;lt;SecurityException&amp;gt;(delegate &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SecuredMethod(); &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }); &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt; &lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [Test, AssumeIdentity("Munchkin")] &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void CallingSecuredMethodWithAssumedIdentityPasses() &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Assert.DoesNotThrow(delegate &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SecuredMethod(); &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }); &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt; &lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [PrincipalPermission(SecurityAction.Demand, Role = "Munchkin")] &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void SecuredMethod() {} &lt;br&gt;} &lt;/p&gt;&lt;br&gt;public class AssumeIdentityAttribute : BeforeAfterTestAttribute &lt;br&gt;&lt;p&gt;{&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public AssumeIdentityAttribute(string name) &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.name = name; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public override void Before(MethodInfo methodUnderTest) &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; originalPrincipal = Thread.CurrentPrincipal; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GenericIdentity identity = new GenericIdentity("boo"); &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GenericPrincipal principal = &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; new GenericPrincipal(identity, new string[] { name }); &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Thread.CurrentPrincipal = principal; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/p&gt;&lt;p&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public override void After(MethodInfo methodUnderTest) &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Thread.CurrentPrincipal = originalPrincipal; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/p&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; readonly string name; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; IPrincipal originalPrincipal; &lt;br&gt;} &lt;/pre&gt;
&lt;p&gt;As you can see, before each test it executed, we update the current thread's identity, and then reset it after the test has run. It doesn't get much simpler than that :)&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=5164441" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/agilemonkey/archive/tags/xUnit.net/default.aspx">xUnit.net</category></item><item><title>Faking out [PrincipalPermission]</title><link>http://blogs.msdn.com/agilemonkey/archive/2007/09/26/faking-out-principalpermission.aspx</link><pubDate>Wed, 26 Sep 2007 15:24:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:5143315</guid><dc:creator>casper</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/agilemonkey/comments/5143315.aspx</comments><wfw:commentRss>http://blogs.msdn.com/agilemonkey/commentrss.aspx?PostID=5143315</wfw:commentRss><wfw:comment>http://blogs.msdn.com/agilemonkey/rsscomments.aspx?PostID=5143315</wfw:comment><description>
&lt;p&gt;Depending on how your unit tests are setup, you may not be running as the proper user and won't have the necessary permissions to invoke a method. If this happens, you can easily alter the principle thread's identity with the following code.&lt;/p&gt;
  
&lt;p&gt;For instance, if you user needs to belong to a certain role (or group) called 'DesiredGroup', this would emulate that fact.&lt;/p&gt;
 &lt;pre&gt;&lt;p&gt;GenericIdentity identity = new GenericIdentity("boo");      &lt;br&gt;GenericPrincipal principal =       &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; new GenericPrincipal(identity, new string[] {"DesiredGroup"});       &lt;br&gt;      &lt;br&gt;Thread.CurrentPrincipal = principal; &lt;/p&gt;&lt;/pre&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=5143315" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/agilemonkey/archive/tags/xUnit.net/default.aspx">xUnit.net</category></item><item><title>xUnit.net goes live!</title><link>http://blogs.msdn.com/agilemonkey/archive/2007/09/21/xunit-net-goes-live.aspx</link><pubDate>Fri, 21 Sep 2007 09:07:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:5026124</guid><dc:creator>casper</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/agilemonkey/comments/5026124.aspx</comments><wfw:commentRss>http://blogs.msdn.com/agilemonkey/commentrss.aspx?PostID=5026124</wfw:commentRss><wfw:comment>http://blogs.msdn.com/agilemonkey/rsscomments.aspx?PostID=5026124</wfw:comment><description>NUnit is dead! Long live xUnit.net!

&lt;p&gt;There are several cool features, including aspect-like extensibility for tests, but the two changes that will immediately make a difference in my day-to-day coding&amp;nbsp;are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;[ExpectedException]&lt;/code&gt; is gone. In its place is &lt;code&gt;Assert.Throws&amp;lt;T&amp;gt;( delegate ... )&lt;/code&gt;. Not only much easier to read, but no longer can a test throw in an unexpected place and still pass. &lt;/li&gt;

&lt;li&gt;No more &lt;code&gt;SetUp/TearDown&lt;/code&gt;. This makes maintaining state between tests a bit more difficult. Having to add static variables to a test fixture should probably signal warning flags about the code under test. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For anyone wondering if it actually works, the answer is a resounding 'Yes'. It's already been integrated into sections of the &lt;a href="http://www.liesdamnedlies.com/2007/07/microsoft-gatin.html" mce_href="http://www.liesdamnedlies.com/2007/07/microsoft-gatin.html"&gt;project I'm currently working on&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;It's available for download here: &lt;a href="http://codeplex.com/xunit" mce_href="http://codeplex.com/xunit"&gt;http://codeplex.com/xunit&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Also, be sure to read Jim Newkirk's &lt;a href="http://jamesnewkirk.typepad.com/posts/2007/09/announcing-xuni.html" mce_href="http://jamesnewkirk.typepad.com/posts/2007/09/announcing-xuni.html"&gt;official announcement&lt;/a&gt;.&lt;br&gt;&lt;/p&gt;
&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=5026124" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/agilemonkey/archive/tags/EDD_2F00_TDD/default.aspx">EDD/TDD</category><category domain="http://blogs.msdn.com/agilemonkey/archive/tags/xUnit.net/default.aspx">xUnit.net</category></item></channel></rss>