<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/"><channel><title>xUnit.net</title><link>http://www.agileprogrammer.com/dotnetguy/category/146.aspx</link><description>xUnit.net</description><managingEditor>Brad Wilson</managingEditor><dc:language>en-US</dc:language><generator>.Text Version 0.95.2005.109</generator><item><dc:creator>Brad Wilson</dc:creator><title>xUnit.net RC1 Released Today</title><link>http://www.agileprogrammer.com/dotnetguy/archive/2007/12/18/23915.aspx</link><pubDate>Tue, 18 Dec 2007 15:44:00 GMT</pubDate><guid>http://www.agileprogrammer.com/dotnetguy/archive/2007/12/18/23915.aspx</guid><description>&lt;p&gt;We (&lt;a href="http://jamesnewkirk.typepad.com/"&gt;Jim Newkirk&lt;/a&gt; and myself) just shipped up the ZIP files for the first (and hopefully only) release candidate for xUnit.net today. This marks the first release where we've split the core of &lt;a href="http://www.codeplex.com/xunit"&gt;xUnit.net&lt;/a&gt; (which is xunit.dll and xunit.console.exe) from the rest of the &lt;a href="http://www.codeplex.com/xunitext"&gt;xUnit.net extensions&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;While there is a download available for the &lt;a href="https://www.codeplex.com/xunit/Release/ProjectReleases.aspx?ReleaseId=8080"&gt;xUnit.net RC1&lt;/a&gt; release, you probably want to download the &lt;a href="http://www.codeplex.com/xunitext/Release/ProjectReleases.aspx?ReleaseId=8103"&gt;December 2007 Extensions for xUnit.net RC1&lt;/a&gt; release instead. It includes all the bits that are in the xUnit.net RC1 release, plus all the extension bits (such as the TD.NET runner, Resharper runner, etc.).&lt;/p&gt; &lt;p&gt;Our current plan, assuming there is no feedback about major bugs or missing functionality, is to release v1 in January.&lt;/p&gt; &lt;h3&gt;What's new in xUnit.net RC1&lt;/h3&gt; &lt;ul&gt; &lt;li&gt;Documentation! We've provided a .chm file with the xUnit.net API documentation, in both the xUnit.net binary download as well as a stand-alone download (for those evaluating xUnit.net).&lt;/li&gt; &lt;li&gt;Removed the "static" declaration from the Assert class. This won't change the usage of Assert, but does allow you to derive from Assert to create your own custom assertions.&lt;/li&gt; &lt;li&gt;Support static test methods, which makes xUnit.net easily usable from F# (see &lt;a href="http://devhawk.net/2007/12/12/Practical+F+Parsing+Unit+Testing.aspx"&gt;Harry Pierson's blog post&lt;/a&gt; for more information).&lt;/li&gt; &lt;li&gt;The console runner now runs in the STA so that xUnit.net can be used for web testing.&lt;/li&gt; &lt;li&gt;There are a few more... see the &lt;a href="https://www.codeplex.com/xunit/Release/ProjectReleases.aspx?ReleaseId=8080"&gt;release&lt;/a&gt; for more information.&lt;/li&gt;&lt;/ul&gt; &lt;h3&gt;What's new in December 2007 Extensions&lt;/h3&gt; &lt;ul&gt; &lt;li&gt;&lt;strong&gt;BREAKING CHANGE!&lt;/strong&gt; The theory data attributes were renamed from DataViaXxx to XxxData (i.e., DataViaProperty is now called PropertyData). We also added InlineData, which works much like the RowTest attribute from MbUnit. A [Theory] method can have multiple Data attributes associated with it, and they are all utilized.&lt;/li&gt; &lt;li&gt;Added AssumeIdentity extension&lt;/li&gt; &lt;li&gt;Added FrozenClock extension&lt;/li&gt; &lt;li&gt;Added Trace extension&lt;/li&gt; &lt;li&gt;Updated to support Resharper 3.1 EAP and x64 machines&lt;/li&gt;&lt;/ul&gt;&lt;img src ="http://www.agileprogrammer.com/dotnetguy/aggbug/23915.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Brad Wilson</dc:creator><title>Class &amp;quot;static&amp;quot; Decorator: Unintended Consequences</title><link>http://www.agileprogrammer.com/dotnetguy/archive/2007/12/05/23886.aspx</link><pubDate>Wed, 05 Dec 2007 07:51:00 GMT</pubDate><guid>http://www.agileprogrammer.com/dotnetguy/archive/2007/12/05/23886.aspx</guid><description>&lt;p&gt;If a class contains nothing but static members and methods, you can decorate the class with the "static" keyword. The purpose of the keyword is ostensibly as a form of documentation: this class has no instance data or methods, so therefore, you cannot "new" one of them up. Seems like an entirely reasonable thing to do. We did exactly that with the Assert class in &lt;a href="http://www.codeplex.com/xunit"&gt;xUnit.net&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Unfortunately, it also has two (IMO unnecessary) side-effects: a static class is always sealed, and cannot derive from another class.&lt;/p&gt; &lt;p&gt;What this means is: if you have a static class, it cannot extend, and it cannot be extended. And since the new &lt;a href="http://msdn2.microsoft.com/en-us/library/bb308966.aspx#csharp3.0overview_topic3"&gt;extension methods&lt;/a&gt; feature in &lt;a href="http://msdn2.microsoft.com/en-us/library/bb308966.aspx"&gt;C# 3.0&lt;/a&gt; can only add instance methods and not static methods, you're kinda stuck.&lt;/p&gt; &lt;p&gt;Just to be clear, this works fine:&lt;/p&gt;&lt;pre&gt;public class StaticBase
{
    public static void This() { }
}

public class StaticDerived : StaticBase
{
    public static void That() { }
}&lt;/pre&gt;
&lt;p&gt;But this doesn't:&lt;/p&gt;&lt;pre&gt;public static class StaticBase
{
    public static void This() { }
}

public static class StaticDerived : StaticBase
{
    public static void That() { }
}&lt;/pre&gt;
&lt;p&gt;Luckily, we caught this before we released xUnit.net 1.0. We're going to remove the static class decorator from Assert so that you can make your own Assert extensions class. The usage of Assert will not change, since the methods are all still static.&lt;/p&gt;&lt;img src ="http://www.agileprogrammer.com/dotnetguy/aggbug/23886.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Brad Wilson</dc:creator><title>[FreezeClock] xUnit.net Extension</title><link>http://www.agileprogrammer.com/dotnetguy/archive/2007/11/11/23751.aspx</link><pubDate>Sun, 11 Nov 2007 10:56:00 GMT</pubDate><guid>http://www.agileprogrammer.com/dotnetguy/archive/2007/11/11/23751.aspx</guid><description>&lt;p&gt;I've just checked in my [FreezeClock] extension into xUnit.net Extensions project, the source for which is available right now in source form in &lt;a href="http://www.codeplex.com/xunitext/SourceControl/DirectoryView.aspx?SourcePath=&amp;amp;changeSetId=7544"&gt;change set 7544&lt;/a&gt;. This is a simplified version of a similar Clock class that we use internally in the CodePlex code itself.&lt;/p&gt; &lt;p&gt;The idea behind [FreezeClock] is simple. Rather than using DateTime.Now, DateTime.UtcNow, or DateTime.Today, instead you use Clock.Now, Clock.UtcNow, and Clock.Today. During normal operation, these Clock operations are just simple forwards on to their DateTime counterparts. (The Clock class is provided as part of the extension, in the XunitExt namespace.)&lt;/p&gt; &lt;p&gt;You can freeze the clock by calling one of Clock's FreezeXxx() methods. Then, until you call Thaw(), all the calls to Clock.Now, Clock.UtcNow, and Clock.Local will use the frozen values. The reason here is for testing purposes: when you have a frozen and consistent time, it makes comparisons against expected values much simpler, because you don't have an introduce "slop" into the comparison to take into the account the execution time of the test code.&lt;/p&gt; &lt;p&gt;In addition to the Clock class, the extension introduces an AOP-style before/after attribute that you can apply to your tests to automatically freeze and thaw the clock for you. For example:&lt;/p&gt;&lt;pre style="margin: 0px"&gt;[&lt;span style="color: #2b91af"&gt;Fact&lt;/span&gt;, &lt;span style="color: #2b91af"&gt;FreezeClock&lt;/span&gt;]&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; FrozenWithCurrentTime()&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;{&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af"&gt;DateTime&lt;/span&gt; result1 = &lt;span style="color: #2b91af"&gt;Clock&lt;/span&gt;.Now;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af"&gt;Thread&lt;/span&gt;.Sleep(100);&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af"&gt;DateTime&lt;/span&gt; result2 = &lt;span style="color: #2b91af"&gt;Clock&lt;/span&gt;.Now;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af"&gt;Assert&lt;/span&gt;.Equal(result1, result2);&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;}&lt;/pre&gt;
&lt;p&gt;Don't forget that the implications of date/time management also extend beyond your code. For example, when using this system, if you need to test dates &amp;amp; times that are placed into your database that are based on the current date &amp;amp; time, those values need to come from your .NET code (specifically, calling Clock.Now and friends) rather than using the date/time functions built into your database to populate those field values.&lt;/p&gt;
&lt;p&gt;Make sure to check out all the unit and acceptance tests to see how the classes work. For further discussion, please visit the corresponding &lt;a href="http://www.codeplex.com/xunitext/Thread/View.aspx?ThreadId=17694"&gt;Forum Post&lt;/a&gt;.&lt;/p&gt;&lt;img src ="http://www.agileprogrammer.com/dotnetguy/aggbug/23751.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Brad Wilson</dc:creator><title>Calling All xUnit.net Extenders!</title><link>http://www.agileprogrammer.com/dotnetguy/archive/2007/11/10/23748.aspx</link><pubDate>Sat, 10 Nov 2007 09:44:00 GMT</pubDate><guid>http://www.agileprogrammer.com/dotnetguy/archive/2007/11/10/23748.aspx</guid><description>&lt;p&gt;We're rapidly approaching the point where we want to finalize what's going into the 1.0 version of &lt;a href="http://www.codeplex.com/xunit"&gt;xUnit.net&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;I know we made lots of big changes from &lt;a href="http://www.codeplex.com/xunit/Release/ProjectReleases.aspx?ReleaseId=7175"&gt;Beta 1&lt;/a&gt; to &lt;a href="http://www.codeplex.com/xunit/Release/ProjectReleases.aspx?ReleaseId=7389"&gt;Beta 2&lt;/a&gt;. We felt like these changes, while somewhat disrupting, provided a better foundation for xUnit.net going forward. We're not planning any more big sweeping changes; our feature &amp;amp; issue list for the proposed &lt;a href="http://www.codeplex.com/xunit/Release/ProjectReleases.aspx?ReleaseId=8080"&gt;Release Candidate 1&lt;/a&gt; is still relatively small.&lt;/p&gt; &lt;p&gt;You may have also noticed that we removed much of the source code from the xUnit.net project itself. All that remains is the source to xunit.dll and xunit.console.exe (and the associated unit tests). The rest of the source code -- including the TestDriven.NET and Resharper runners -- has been moved to the &lt;a href="http://www.codeplex.com/xunitext"&gt;xUnit.net Extensions&lt;/a&gt; project. The Extensions project will issue releases at the same time as the xUnit project, with the first release being extensions suitable for use with RC1.&lt;/p&gt; &lt;p&gt;By keeping a tight core with well-defined and well-used extension points, we're hoping that releases of xUnit.net itself will be very infrequent; ideally, we release 1.0 and never have to release again. Ideally. :)&lt;/p&gt; &lt;p&gt;We believe that most of the activity will move to the xUnit.net Extensions project, hopefully with many community contributions, both inside and outside of Microsoft. Yes, we are planning to accept community contributions!&lt;/p&gt; &lt;p&gt;The call to action today, then, is two-fold.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;em&gt;First&lt;/em&gt;&lt;/strong&gt;, if you think there are any missing features and/or outstanding bugs in the core of xUnit.net itself (that is, in xunit.dll and the console runner xunit.console.exe), now is the time to speak up. If you haven't already, please start using Beta 2 and let us know what's missing from the core.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;em&gt;Second&lt;/em&gt;&lt;/strong&gt;, there is an open issue for the Release Candidate titled &lt;a href="http://www.codeplex.com/xunit/WorkItem/View.aspx?WorkItemId=2081"&gt;Flesh out ITypeInfo, IMethodInfo, IAttributeInfo&lt;/a&gt;. These three interfaces are used within the runner infrastructure to determine which classes contain tests, which methods are tests, and which attributes they are decorated with.&lt;/p&gt; &lt;p&gt;These interfaces aren't nearly as full featured as their reflection counterparts. They contain just enough information for the xUnit.net runner infrastructure to be able to inspect and run our own test types (plus our NUnit extension, [RunWithNUnit]). Since these interfaces are defined in the core xunit.dll library, we'd like to know which things are missing from them that would be required by extenders.&lt;/p&gt; &lt;p&gt;Specifically:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;People implementing ITestClassCommand (for [RunWith()] support) will likely be using all three  &lt;li&gt;People implementing custom test types (deriving from [Fact] and/or implementing ITestCommand) will likely be using IMethodInfo and IAttributeInfo&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;If you're planning to do either of these activities, we'd love for feedback on these interfaces.&lt;/p&gt; &lt;p&gt;For existing implementations of these interfaces, there is a reflection wrapper inside of xunit.csproj (in Reflector.cs) and several Resharper wrappers in xunitext.runner.jetbrains.csproj (in TypeWrapper.cs, MethodWrapper.cs, and AttributeWrapper.cs).&lt;/p&gt; &lt;p&gt;If you have feedback on anything regarding the xUnit.net 1.0 RC1, and especially around these three interfaces, please use the &lt;a href="http://www.codeplex.com/xunit/Thread/List.aspx"&gt;xUnit.net forums&lt;/a&gt; for discussions. If you need to contact me directly, please use my &lt;a href="http://www.codeplex.com/UserAccount/UserProfile.aspx?UserName=BradWilson"&gt;CodePlex Contact Page&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Thanks, and happy extending!&lt;/p&gt;&lt;img src ="http://www.agileprogrammer.com/dotnetguy/aggbug/23748.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Brad Wilson</dc:creator><title>xUnit.net Beta 2 Released</title><link>http://www.agileprogrammer.com/dotnetguy/archive/2007/10/25/23642.aspx</link><pubDate>Thu, 25 Oct 2007 11:58:00 GMT</pubDate><guid>http://www.agileprogrammer.com/dotnetguy/archive/2007/10/25/23642.aspx</guid><description>&lt;p&gt;We just pushed the button to ship &lt;a href="http://www.codeplex.com/Release/ProjectReleases.aspx?ProjectName=xunit&amp;amp;ReleaseId=7389"&gt;beta 2 of xUnit.net&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;There are a lot of breaking changes enumerated in &lt;a href="http://www.codeplex.com/xunit/Thread/View.aspx?ThreadId=16734"&gt;this forum post&lt;/a&gt;, so please read before upgrading. Most of the changes affect consumers of the xUnit SDK, but there are a few that affect users as well. The following issues and features were added or addresses in beta 2:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="http://www.codeplex.com/xunit/WorkItem/View.aspx?WorkItemId=1392"&gt;Unexpected exception message does not show exception type&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://www.codeplex.com/xunit/WorkItem/View.aspx?WorkItemId=1393"&gt;Incorrect output for timed out test&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://www.codeplex.com/xunit/WorkItem/View.aspx?WorkItemId=1495"&gt;TD.NET + [RunWithNUnit] issue&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://www.codeplex.com/xunit/WorkItem/View.aspx?WorkItemId=1519"&gt;Console runner throws exception when .config file is missing&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://www.codeplex.com/xunit/WorkItem/View.aspx?WorkItemId=1545"&gt;Suggestion: Assert.Equal should work with IEquatable&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://www.codeplex.com/xunit/WorkItem/View.aspx?WorkItemId=1557"&gt;cant create abstract test case&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://www.codeplex.com/xunit/WorkItem/View.aspx?WorkItemId=1640"&gt;Load default configuration file if config file is not specified&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://www.codeplex.com/xunit/WorkItem/View.aspx?WorkItemId=1742"&gt;Exception not serializable error&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://www.codeplex.com/xunit/WorkItem/View.aspx?WorkItemId=1836"&gt;Rename [Property] to [Trait]&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://www.codeplex.com/xunit/WorkItem/View.aspx?WorkItemId=1837"&gt;Rename [Test] to [Fact]&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://www.codeplex.com/xunit/WorkItem/View.aspx?WorkItemId=1849"&gt;Pass MethodInfo to DataAttribute instead of Type&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://www.codeplex.com/xunit/WorkItem/View.aspx?WorkItemId=1850"&gt;Allow test methods to return values&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://www.codeplex.com/xunit/WorkItem/View.aspx?WorkItemId=1505"&gt;Support Resharper Test Runner&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://www.codeplex.com/xunit/WorkItem/View.aspx?WorkItemId=1580"&gt;Support private test methods&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://www.codeplex.com/xunit/WorkItem/View.aspx?WorkItemId=1843"&gt;Replace ITestFixture with IUseFixture&amp;lt;T&amp;gt;&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt; &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:a5872546-692d-4e05-88d7-cc4120842f4d" 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/xUnit.net/" rel="tag"&gt;xUnit.net&lt;/a&gt; 		,  		&lt;a href="http://technorati.com/tags/Unit%20Testing/" rel="tag"&gt;Unit Testing&lt;/a&gt; 		&lt;/div&gt;&lt;img src ="http://www.agileprogrammer.com/dotnetguy/aggbug/23642.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Brad Wilson</dc:creator><title>xUnit.net Changes for Beta 2</title><link>http://www.agileprogrammer.com/dotnetguy/archive/2007/10/21/23601.aspx</link><pubDate>Sun, 21 Oct 2007 00:41:00 GMT</pubDate><guid>http://www.agileprogrammer.com/dotnetguy/archive/2007/10/21/23601.aspx</guid><description>&lt;p&gt;We just pushed up a lengthy forum post regarding &lt;a href="https://www.codeplex.com/Thread/View.aspx?ProjectName=xunit&amp;amp;ThreadId=16734"&gt;the changes coming in Beta 2 for xUnit.net&lt;/a&gt;. There are quite a few high impact changes, so if you're using xUnit.net, it would be worth reviewing the post in preparation.&lt;/p&gt; &lt;p&gt;It is our hope to post the Beta 2 bits sometime in the next week. For those who are anxious to start looking at the changes, the trunk of the source tree has most of the changes in it already, including all those listed in the forum post.&lt;/p&gt; &lt;p&gt;I personally want to thank everybody who helped contribute with feedback on Beta 1 (there are too many to list). Please keep the feedback coming!&lt;/p&gt;&lt;img src ="http://www.agileprogrammer.com/dotnetguy/aggbug/23601.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Brad Wilson</dc:creator><title>p&amp;amp;p Summit, Redmond WA, Nov 5-9</title><link>http://www.agileprogrammer.com/dotnetguy/archive/2007/10/20/23600.aspx</link><pubDate>Sat, 20 Oct 2007 18:27:00 GMT</pubDate><guid>http://www.agileprogrammer.com/dotnetguy/archive/2007/10/20/23600.aspx</guid><description>&lt;p&gt;It's hard to believe that another &lt;a href="http://www.pnpsummit.com/west2007.aspx"&gt;p&amp;amp;p Summit is almost here&lt;/a&gt;... the time has really flown by. This year I'll be co-presenting twice. The line-up of keynote talks looks positively awesome this year! (Despite Scott Hansleman's protestations to the contrary, he does belong in that group of intelligent and talented people. ;)&lt;/p&gt; &lt;p&gt;The first talk, "Yet another agile talk on agility", is one where &lt;a href="http://www.peterprovost.org/"&gt;Peter&lt;/a&gt; and I will answer questions from the audience about our experiences running agile teams, inside and outside of Microsoft. We run the talk just like an agile project, a technique that I first saw used by &lt;a href="http://www.agileprogrammer.com/oneagilecoder/"&gt;Brian Button&lt;/a&gt;. You start by creating an initial backlog (i.e., people ask questions and you write them down), then you go through an iterative stack-ranking and execution (i.e., answer them) process with time-boxed iterations (i.e., 5 minutes). It's pretty interesting process and never yields the same talk twice. It's also awesome in its ability to require no prepartion. ;)&lt;/p&gt; &lt;p&gt;The second talk, "Dependency Injection Frameworks", is one where &lt;a href="http://www.agileprogrammer.com/scottden/"&gt;Scott&lt;/a&gt; and I will talk about the work we've done evolving ObjectBuilder 2.0, as well as some sample containers that we have on the &lt;a href="http://www.codeplex.com/ObjectBuilder"&gt;ObjectBuilder CodePlex project space&lt;/a&gt;. A lot of the work there has come from real container needs in the wild, and some of the concerns about the complicated architecture of ObjectBuilder 1.0 have been addressed. In addition to our new containers and new architecture, we'll show off some of the new core features we've added, including a lightweight version of the CAB EventBroker and a method-interception system modeled after Enterprise Library's Policy Injection App Block.&lt;/p&gt; &lt;p&gt;I'm trying to make a commitment to be there all through the first 3 days so that people can sideline me both before and after the talks. Unfortunately, I won't be able to be there for the last 2 days. If you're going to be there, and want to talk about any of the projects I've got going on right now (&lt;a href="http://www.codeplex.com/"&gt;CodePlex&lt;/a&gt;, ObjectBuilder, &lt;a href="http://www.codeplex.com/xunit"&gt;xUnit.net&lt;/a&gt;, etc.) please don't hesitate to find me. You can also use the &lt;a href="http://www.agileprogrammer.com/dotnetguy/contact.aspx"&gt;Contact&lt;/a&gt; page here on the blog if you want to make sure I find time for you.&lt;/p&gt; &lt;p&gt;Hope to see you there!&lt;/p&gt;&lt;img src ="http://www.agileprogrammer.com/dotnetguy/aggbug/23600.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Brad Wilson</dc:creator><title>Seattle Code Camp v3.0 - Nov 17 &amp;amp; 18</title><link>http://www.agileprogrammer.com/dotnetguy/archive/2007/10/15/23584.aspx</link><pubDate>Mon, 15 Oct 2007 20:20:00 GMT</pubDate><guid>http://www.agileprogrammer.com/dotnetguy/archive/2007/10/15/23584.aspx</guid><description>&lt;p&gt;Seattle Code Camp is back! &lt;a href="http://seattle.codecamp.us/default.aspx"&gt;More information&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; Looks like it's been pushed back a couple weeks due to conflicts, and is now November 17 &amp;amp; 18.&lt;/p&gt;&lt;img src ="http://www.agileprogrammer.com/dotnetguy/aggbug/23584.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Brad Wilson</dc:creator><title>The Irony of ALT.NET</title><link>http://www.agileprogrammer.com/dotnetguy/archive/2007/10/09/23553.aspx</link><pubDate>Tue, 09 Oct 2007 18:57:00 GMT</pubDate><guid>http://www.agileprogrammer.com/dotnetguy/archive/2007/10/09/23553.aspx</guid><description>&lt;p&gt;I spent this past weekend at the inaugural ALT.NET conference in Austin. It was a great time, and I loved hanging out with everybody.&lt;/p&gt; &lt;p&gt;I can't help but point out an irony, though: for a group of people who revel in alternatives, they seemed to be questioning our alternative unit testing framework an awful lot. ;)&lt;/p&gt;&lt;img src ="http://www.agileprogrammer.com/dotnetguy/aggbug/23553.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Brad Wilson</dc:creator><title>Weaving with xUnit.net</title><link>http://www.agileprogrammer.com/dotnetguy/archive/2007/09/27/23449.aspx</link><pubDate>Thu, 27 Sep 2007 07:09:00 GMT</pubDate><guid>http://www.agileprogrammer.com/dotnetguy/archive/2007/09/27/23449.aspx</guid><description>&lt;p&gt;One of the more interesting features we added to xUnit.net was support for "before/after test" code in the form of an attribute. It feels a bit like method weaving in AOP. Our first example of this was the [AutoRollback] attribute that we shipped in xunit.extensions.dll.&lt;/p&gt; &lt;p&gt;Another one we'll do for CodePlex is one I call [FreezeClock], which uses our internal Clock class (a testable replacement for DateTime) which supports the concept of freezing the clock at a moment in time, and then unfreezing when the test is over. This is useful to ensure, for example, that some code under test is calling "Clock.Now", so that you can actually test the value they pushed in some arbitrary amount of time later by simply calling "Clock.Now" again. When we get around to doing that one, I'll make a blog post which shows the Clock class as well as our attribute.&lt;/p&gt; &lt;p&gt;This morning I woke up to find &lt;a href="http://blogs.msdn.com/agilemonkey/archive/2007/09/27/weaving-with-xunit-net.aspx"&gt;Casper had blogged a third one: [AssumeIdentity]&lt;/a&gt;. This little gem will override the principal on the current thread with a generic identity with the name you give it. Sweet and simple.&lt;/p&gt;&lt;pre&gt;public class AssumeIdentityAttribute : BeforeAfterTestAttribute
{
    public AssumeIdentityAttribute(string name)
    {
        this.name = name;
    }

    public override void Before(MethodInfo methodUnderTest)
    {
        originalPrincipal = Thread.CurrentPrincipal;
        GenericIdentity identity = new GenericIdentity("boo");
        GenericPrincipal principal =
                new GenericPrincipal(identity, new string[] { name });
        Thread.CurrentPrincipal = principal;
    }

    public override void After(MethodInfo methodUnderTest)
    {
        Thread.CurrentPrincipal = originalPrincipal;
    }

    readonly string name;
    IPrincipal originalPrincipal;
}&lt;/pre&gt;
&lt;p&gt;I suspect there are a lot of these little cross-cutting concern attributes waiting to be written (and shared). :)&lt;/p&gt;&lt;img src ="http://www.agileprogrammer.com/dotnetguy/aggbug/23449.aspx" width = "1" height = "1" /&gt;</description></item></channel></rss>