<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-US"><title type="html">Ian Ceicys blogging about life, the universe, and all things technology related.</title><subtitle type="html" /><id>http://blogs.msdn.com/iceicys/atom.xml</id><link rel="alternate" type="text/html" href="http://blogs.msdn.com/iceicys/default.aspx" /><link rel="self" type="application/atom+xml" href="http://blogs.msdn.com/iceicys/atom.xml" /><generator uri="http://communityserver.org" version="2.1.61025.2">Community Server</generator><updated>2007-10-20T14:42:39Z</updated><entry><title>TFS Work Item Manager &amp; TFS Project Dashboard</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/iceicys/archive/2009/09/22/tfs-work-item-manager-tfs-project-dashboard.aspx" /><id>http://blogs.msdn.com/iceicys/archive/2009/09/22/tfs-work-item-manager-tfs-project-dashboard.aspx</id><published>2009-09-23T01:12:50Z</published><updated>2009-09-23T01:12:50Z</updated><content type="html">&lt;p&gt;&lt;span style="color:#333333; font-family:Arial; font-size:8pt"&gt;TFS Work Item Manager provides a unified platform to support those of you who want to take advantage of the Team Foundation Server without the need to switch from MS Team Explorer to MS Excel, to MS Project to find a certain work item.&lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;
	&lt;/p&gt;&lt;p&gt;This is a really cool application that Imaginet has built using telerik's controls.
&lt;/p&gt;&lt;p&gt; Definitely looks valuable to have running on a flat panel screen with the development team. 
&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.telerik.com/products/tfsmanager-and-tfsdashboard.aspx"&gt;http://www.telerik.com/products/tfsmanager-and-tfsdashboard.aspx&lt;/a&gt;&lt;br/&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9898205" width="1" height="1"&gt;</content><author><name>Ianceicys</name><uri>http://blogs.msdn.com/members/Ianceicys.aspx</uri></author></entry><entry><title>Customizing Team Foundation Server - Using Team Build to Deploy MSIs</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/iceicys/archive/2009/09/16/customize-team-build-using-team-foundation-server-to-deploy-msis.aspx" /><id>http://blogs.msdn.com/iceicys/archive/2009/09/16/customize-team-build-using-team-foundation-server-to-deploy-msis.aspx</id><published>2009-09-16T15:54:00Z</published><updated>2009-09-16T15:54:00Z</updated><content type="html">&lt;DIV id=ctl00_ctl00_MasterContent_Content_PostRepeater_ctl00_BodyDiv class=discussionListContent&gt;
&lt;P&gt;I've gone ahead and recorded a 1.5 hour screencast going through and demonstrating how to build out a virtual environment with Wix and Team Deploy deploying onto 2 target virtual machines.&lt;/P&gt;
&lt;P&gt;This screencast includes all of the details that you could need for setting up team deploy including:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Setup of a domain controller &amp;amp; domain accounts 
&lt;LI&gt;Installing&amp;nbsp;Team Foundation Server 2008 
&lt;LI&gt;Setting up Team Build 
&lt;LI&gt;Setting up 2 target machines 
&lt;LI&gt;Setting up a new team project 
&lt;LI&gt;WIX 3.0 setup 
&lt;LI&gt;Team Build Setup 
&lt;LI&gt;Configuration of Team Build 
&lt;LI&gt;Configuration of Team Build TFSBuild.Proj with Team Deploy. &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;This video is very thorough and a bit long but has everything you need to get started.&lt;/P&gt;
&lt;P&gt;Check it out over at: &lt;A href="http://www.noblegroupinternational.com/content/alm/teamdeploy/TeamDeploy.html" mce_href="http://www.noblegroupinternational.com/content/alm/teamdeploy/TeamDeploy.html"&gt;&lt;FONT color=#3e62a6&gt;http://www.noblegroupinternational.com/content/alm/teamdeploy/TeamDeploy.html&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Don't forget to use the table of contents button (to the left&amp;nbsp;of the&amp;nbsp;sound button) in the controls at the bottom of the player.&lt;/P&gt;
&lt;P&gt;Quick note the last 5 minutes of the video&amp;nbsp;are the most exciting (step 120: Check-in changes to kick off CI-Build) because I demonstrate everything working together and doing multiple deploys on Continuous Integration builds.&lt;/P&gt;
&lt;P&gt;Feedback is welcome.&lt;/P&gt;
&lt;P&gt;Update1: I've received several requests for a downloadable version of the presentation. Right click on this link and choose save as target to download a .wmv&amp;nbsp;copy locally: &lt;A title="Video Presentation Link" href="http://www.noblegroupinternational.com/content/alm/teamdeploy/TeamDeploy.wmv" mce_href="http://www.noblegroupinternational.com/content/alm/teamdeploy/TeamDeploy.wmv"&gt;Presentation Video Link&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Update2: I've received a request for a copy of the powerpoint slides included in the presentation. Right click on this link and choose save as target to download (2007&amp;nbsp;.pptx file). &lt;A title="PowerPoint Slides" href="http://www.noblegroupinternational.com/content/alm/teamdeploy/E2E_Build_Automation_with_TeamBuild.pptx" mce_href="http://www.noblegroupinternational.com/content/alm/teamdeploy/E2E_Build_Automation_with_TeamBuild.pptx"&gt;PowerPoint Slides&lt;/A&gt;&lt;/P&gt;&lt;/DIV&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9895831" width="1" height="1"&gt;</content><author><name>Ianceicys</name><uri>http://blogs.msdn.com/members/Ianceicys.aspx</uri></author><category term="Team Foundation Server" scheme="http://blogs.msdn.com/iceicys/archive/tags/Team+Foundation+Server/default.aspx" /></entry><entry><title>Heading to PDC2008</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/iceicys/archive/2008/10/26/heading-to-pdc2008.aspx" /><id>http://blogs.msdn.com/iceicys/archive/2008/10/26/heading-to-pdc2008.aspx</id><published>2008-10-26T23:11:00Z</published><updated>2008-10-26T23:11:00Z</updated><content type="html">&lt;P&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;I'm on my way to Los Angeles. I'm super excited about a bunch of the cool announcements Microsoft is going to be making about Windows 7.....&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;o:p&gt;&amp;nbsp;There's so much coming...get ready for the tsunami...&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;o:p&gt;I'm also looking forward to meet up with a few niners from Channel9.&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;o:p&gt;Stay tuned for more....it's going to be an awesome week for the geeks out there. &lt;BR&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9016954" width="1" height="1"&gt;</content><author><name>Ianceicys</name><uri>http://blogs.msdn.com/members/Ianceicys.aspx</uri></author><category term="PDC2008" scheme="http://blogs.msdn.com/iceicys/archive/tags/PDC2008/default.aspx" /></entry><entry><title>Team System Web Access (TSWA) 2008 SP1 Power Tool Shipped!</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/iceicys/archive/2008/08/30/team-system-web-access-tswa-2008-sp1-power-tool-shipped.aspx" /><id>http://blogs.msdn.com/iceicys/archive/2008/08/30/team-system-web-access-tswa-2008-sp1-power-tool-shipped.aspx</id><published>2008-08-30T18:10:12Z</published><updated>2008-08-30T18:10:12Z</updated><content type="html">&lt;p&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=3ECD00BA-972B-4120-A8D5-3D38311893DE&amp;amp;displaylang=en"&gt;&lt;img border="0" alt="webaccess" align="left" src="http://blogs.msdn.com/blogfiles/edhintz/WindowsLiveWriter/TeamSystemWebAccess2008SP1PowerTool_F427/webaccess_3.gif" width="190" height="50"&gt;&lt;/a&gt; &lt;p&gt;&amp;nbsp; &lt;p&gt;&amp;nbsp; &lt;p&gt;&amp;nbsp; &lt;p&gt;We have just shipped Team System Web Access (TSWA) 2008 SP1 Power Tool. &lt;p&gt;· &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=3ECD00BA-972B-4120-A8D5-3D38311893DE&amp;amp;displaylang=en"&gt;Download TSWA 2008 SP1&lt;/a&gt; &lt;p&gt;&lt;b&gt;What’s New in TSWA 2008 SP1?&lt;/b&gt; &lt;p&gt;· &lt;a href="http://go.microsoft.com/fwlink/?LinkID=125903"&gt;Work item only view&lt;/a&gt; for users without a client access license. [&lt;i&gt;Previously known as Work Item Web Access (WIWA) feature&lt;/i&gt;]  &lt;p&gt;· Run a single instance with multiple languages (*) &lt;p&gt;· &lt;a href="http://go.microsoft.com/fwlink/?LinkId=126663"&gt;Create work items with initial values&lt;/a&gt; by using a URL.  &lt;p&gt;· &lt;a href="http://go.microsoft.com/fwlink/?LinkId=126665"&gt;Share ad-hoc work item queries&lt;/a&gt; by using a URL.  &lt;p&gt;· &lt;a href="http://go.microsoft.com/fwlink/?LinkId=126666"&gt;Find and view Shelvesets&lt;/a&gt; - great for code reviews.  &lt;p&gt;· Improved &lt;a href="http://go.microsoft.com/fwlink/?LinkId=126667"&gt;work item search syntax&lt;/a&gt;.  &lt;p&gt;&lt;b&gt;(*) Single instance with multiple languages &lt;/b&gt; &lt;p&gt;A single instance of TSWA now supports multiple languages. By default, the UI language is based on the user's browser settings (accept-language header). The UI language can be overwritten in profile settings. In total, 10 languages are available: English, Chinese Simplified, Chinese Traditional, German, French, Italian, Japanese, Korean, Russian, and Spanish.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8909998" width="1" height="1"&gt;</content><author><name>Ianceicys</name><uri>http://blogs.msdn.com/members/Ianceicys.aspx</uri></author></entry><entry><title>“Scaling Lean &amp; Agile Development: Successful Large, Multisite &amp; Offshore Products with Large-Scale Scrum"</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/iceicys/archive/2008/08/24/scaling-lean-agile-development-successful-large-multisite-offshore-products-with-large-scale-scrum.aspx" /><id>http://blogs.msdn.com/iceicys/archive/2008/08/24/scaling-lean-agile-development-successful-large-multisite-offshore-products-with-large-scale-scrum.aspx</id><published>2008-08-25T01:47:08Z</published><updated>2008-08-25T01:47:08Z</updated><content type="html">&lt;p&gt;&lt;/p&gt; &lt;p&gt;Bas and Craig Larman are writing a book, “Scaling Lean &amp;amp; Agile Development: Successful Large, Multisite &amp;amp; Offshore Products with Large-Scale Scrum” on very large scale agile projects. You can read the &lt;a href="http://www.infoq.com/resource/articles/scaling-lean-agile-feature-teams/en/resources/Larman%20Vodde%20Feature%20Teams%20-%20InfoQ.pdf"&gt;chapter that covers the Feature Teams approach&lt;/a&gt; on &lt;a href="http://www.infoq.com/articles/scaling-lean-agile-feature-teams"&gt;InfoQ&lt;/a&gt;. I’m really looking forward to the book (due out in December). I read the first chapter yesterday, it has tons of good content in it, and I highly recommend reading it. &lt;/p&gt; &lt;p&gt; The chapter also has a great list of references at the end of it. I'm actively beginning to track down many of these resources and I'll be plowing through them over the next few months.&lt;/p&gt; &lt;p&gt;&lt;i&gt;1. &lt;/i&gt;AB07 Anconda, D., Bresman, H. 2007. &lt;i&gt;X-Teams: How to Build Teams That Lead, Innovate and Succeed&lt;/i&gt;. Harvard Business School Press&lt;i&gt;&lt;/i&gt; &lt;p&gt;2. Agile01 2001. &lt;i&gt;The Agile Manifesto&lt;/i&gt;. &lt;a href="http://www.agilemanifesto.org"&gt;www.agilemanifesto.org&lt;/a&gt; &lt;p&gt;3. Ambler03 Ambler, S. 2003. “Isn’t That Special?”, &lt;i&gt;Dr. Dobbs Journal&lt;/i&gt;, Jan. 2003 &lt;p&gt;4. Baker95 Baker, B. 1995. “On Finding Duplication and Near-Duplication in Large Software Systems”. &lt;i&gt;Proceedings of the Working Conference on Reverse Engineering&lt;/i&gt;, 1995 &lt;p&gt;&lt;b&gt;&lt;/b&gt; &lt;p&gt;5. Belshee05a Belshee, A. 2005. “Promiscuous Pairing and Beginner’s Mind”, &lt;i&gt;Proceedings of Agile 2005 Conference&lt;/i&gt; &lt;p&gt;6. Belshee05b Belshee A. 2005, “Promiscuous Pairing and the Least Qualified Implementer”, &lt;i&gt;Agile Toolkit Podcast&lt;/i&gt;, &lt;a href="http://agiletoolkit.libsyn.com/index.php?post_id=15636"&gt;http://agiletoolkit.libsyn.com/index.php?post_id=15636&lt;/a&gt; &lt;p&gt;7. Brooks75 Brooks, F. 1975, &lt;i&gt;The Mythical Man-Month&lt;/i&gt;, Addison-Wesley Conway68 Conway, M. 1968, “How do Committees Invent?”. &lt;i&gt;Datamation Magazine&lt;/i&gt;, Apr 1968 &lt;p&gt;8. CS95 Cusumano, M., Selby, W. 1995. &lt;i&gt;Microsoft Secrets&lt;/i&gt;. Simon &amp;amp; Schuster &lt;p&gt;9. DeMarco01 DeMarco, T. 2001. &lt;i&gt;Slack&lt;/i&gt;. Random House &lt;p&gt;10. Dibona07 Dibona, C. 2007. &lt;a href="http://www.edge.org/q2008/q08_15.html"&gt;http://www.edge.org/q2008/q08_15.html&lt;/a&gt;&lt;br&gt;&lt;i&gt;&lt;/i&gt;&lt;/p&gt; &lt;p&gt;&lt;i&gt;11. &lt;/i&gt;Eckstein04 Eckstein, J. 2004, &lt;i&gt;Agile Software Development in the Large&lt;/i&gt;, Dorset House&lt;i&gt;&lt;/i&gt;&lt;/p&gt; &lt;p&gt;&lt;i&gt;12. &lt;/i&gt;Eckstein08 Eckstein, J. 2008, &lt;i&gt;Agile in the Face of Global Software Development&lt;/i&gt;, Draft&lt;i&gt;&lt;/i&gt; &lt;p&gt;&lt;i&gt;13. &lt;/i&gt;Glass03 Glass, R. 2003. &lt;i&gt;Facts and Fallacies of Software Engineering.&lt;/i&gt;Addison-Wesley&lt;i&gt;&lt;/i&gt; &lt;p&gt;14. Hackman80 Hackman, R. 1980. &lt;i&gt;Work Redesign&lt;/i&gt;. Prentice-Hall &lt;p&gt;15. Hackman02 Hackman, R. 2002. &lt;i&gt;Leading Teams&lt;/i&gt;. Harvard Business School Press &lt;p&gt;16. Highsmith04 Highsmith, J. 2004. &lt;i&gt;Agile Project Management&lt;/i&gt;. Addison-Wesley&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8892800" width="1" height="1"&gt;</content><author><name>Ianceicys</name><uri>http://blogs.msdn.com/members/Ianceicys.aspx</uri></author></entry><entry><title>NUnit Conversion to VSTS</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/iceicys/archive/2007/10/20/nunit-conversion-to-vsts.aspx" /><id>http://blogs.msdn.com/iceicys/archive/2007/10/20/nunit-conversion-to-vsts.aspx</id><published>2007-10-20T17:15:26Z</published><updated>2007-10-20T17:15:26Z</updated><content type="html">&lt;p&gt;&lt;a&gt;Converting NUnit Unit Tests into Tests Compatible with Visual Studio 2005 Team System&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="#_Toc171825673"&gt;Installation. 4&lt;/a&gt; &lt;p&gt;&lt;a href="#_Toc171825674"&gt;Quick Start 5&lt;/a&gt; &lt;p&gt;&lt;a href="#_Toc171825676"&gt;Differences. 13&lt;/a&gt; &lt;p&gt;&lt;a href="#_Toc171825702"&gt;Software License. 27&lt;/a&gt; &lt;p&gt;NUnit (&lt;a href="http://nunit.org"&gt;http://nunit.org&lt;/a&gt;) is a unit testing tool for the .NET Framework. It is currently at version 2.2.8 and it has been in use since early 2001. Visual Studio 2005 Team System introduces a similar capability which is integrated into the Team System suite of tools. The unit testing support is in the Developer and Test versions of Visual Studio 2005 Team System. This tool will assist in the migration of existing NUnit tests into test code compatible with Visual Studio.  &lt;p&gt;&lt;b&gt;Note: The conversion is not 100% compatible. There are differences that exist between the two testing tools. Some of these can be figured out by the converter and the code adapted to work, others cannot. In all cases the converted code should compile in Visual Studio but there may be instances where the converted tests will not run. These tests will require manual intervention on your part to complete the conversion process.&lt;/b&gt; &lt;h3&gt;&lt;a&gt;Installation&lt;/a&gt;&lt;/h3&gt; &lt;p&gt;&lt;b&gt;1. &lt;/b&gt;Unzip the nunitconversion.zip package &lt;p&gt;&lt;b&gt;2. &lt;/b&gt;Install NUnit-2.2.4-net-2.0.msi &lt;p&gt;&lt;b&gt;&lt;i&gt;The tool has only been tested against NUnit 2.2.4, if you have a later version of Nunit installed you may want to downgrade to Nunit 2.2.4. &lt;/i&gt;&lt;/b&gt; &lt;p&gt;&lt;b&gt;3. &lt;/b&gt;Install the Guidance Automation Extensions (GAX) February 2007 CTP before moving on to the next step.  &lt;p&gt;&lt;b&gt;4. &lt;/b&gt;Install the Guidance Automation Toolkit February 2007 CTP before moving on to the next step. &lt;p&gt;&lt;b&gt;5. &lt;/b&gt;Right click on NunitConversionSetup.bat and choose run as administrator.  &lt;p&gt;&lt;b&gt;6. &lt;/b&gt;Follow the MSI installation instructions. One caveat: It has not been tested in any other directory than the default directory. This of course does not mean it will not work in a different directory it just means that it might not. Also the rest of the instructions assume you have put it in the default directory. You can think of this as a strong hint to leave it in the default directory. &lt;p&gt;&lt;b&gt;7. &lt;/b&gt;Start Visual Studio 2005 Team System.  &lt;p&gt;&lt;b&gt;8. &lt;/b&gt;Open a solution file that has existing NUnit test code.  &lt;p&gt;&lt;b&gt;9. &lt;/b&gt;On the &lt;b&gt;Tools&lt;/b&gt; menu, click &lt;b&gt;Guidance Package Manager&lt;/b&gt;. A dialog box should open, see below. You should check to make sure that the “Convert NUnit Test Code” Recipe is present. Then click &lt;b&gt;Close&lt;/b&gt;. &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/iceicys/WindowsLiveWriter/HelloWorld2_8523/clip_image002%5B5%5D.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="302" alt="clip_image002[5]" hspace="12" src="http://blogs.msdn.com/blogfiles/iceicys/WindowsLiveWriter/HelloWorld2_8523/clip_image002%5B5%5D_thumb.jpg" width="508" border="0"&gt;&lt;/a&gt; &lt;p&gt;&lt;b&gt;10. &lt;/b&gt;You have completed the installation.  &lt;h3&gt;&lt;a&gt;Quick Start&lt;/a&gt;&lt;/h3&gt; &lt;p&gt;The next step after installation has been completed is to convert some test code. The following instructions will walk you through this process step-by-step. &lt;br&gt;&lt;b&gt;Note: You should always back up all your filesbefore running the converter. That way if you don’t like how the conversion process works you can always go back.&lt;/b&gt; &lt;p&gt;1. Back-up the files and their associated project and solution files. This step is critically important. &lt;b&gt;There is no automated restore of your files back to a previous state.&lt;/b&gt; &lt;p&gt;2. Start Visual Studio 2005 Team System and &lt;b&gt;run as Administrator&lt;/b&gt;.  &lt;p&gt;3. On the &lt;b&gt;File&lt;/b&gt; menu, navigate to &lt;b&gt;New&lt;/b&gt;, click &lt;b&gt;Project/Solution&lt;/b&gt;. Select C# Class Library project. Name the project BankingProject.  &lt;p&gt;4. Rename class1.cs to Account.cs &lt;p&gt;5. Paste the following code into Account.cs: &lt;blockquote&gt; &lt;p&gt;&lt;strong&gt;using System;&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;using System.Collections.Generic;&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;using System.Text;&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;namespace BankingProject&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;{&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;public class Account&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;{&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;private float balance;&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;public void Deposit(float amount)&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;{&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;balance += amount;&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;}&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;public void Withdraw(float amount)&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;{&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;balance -= amount;&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;}&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;public void TransferFunds(Account destination, float amount)&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;{&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;if (balance - amount &amp;lt; minimumBalance)&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;throw new InsufficientFundsException();&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;destination.Deposit(amount);&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;Withdraw(amount);&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;}&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;public float Balance&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;{&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;get { return balance; }&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;}&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;private float minimumBalance = 10.00F;&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;public float MinimumBalance&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;{&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;get { return minimumBalance; }&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;}&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;public class InsufficientFundsException : ApplicationException&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;{&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;}&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;}&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;6. Right click on the solution and select &lt;b&gt;Add New Item&lt;/b&gt; choose class library and use the name &lt;b&gt;AccountTest.cs&lt;/b&gt; &lt;p&gt;7. Paste the following code into AccountTest.cs &lt;blockquote&gt; &lt;p&gt;&lt;strong&gt;using System;&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;using System.Collections.Generic;&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;using System.Text;&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;using NUnit.Framework;&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;namespace BankingProject&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;{&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;[TestFixture]&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;public class AccountTest&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;{&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;Account source;&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;Account destination;&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;[SetUp]&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;public void Init()&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;{&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;source = new Account();&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;source.Deposit(200.00F);&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;destination = new Account();&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;destination.Deposit(150.00F);&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;}&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;[Test]&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;public void TransferFunds()&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;{&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;source.TransferFunds(destination, 100.00f);&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;Assert.AreEqual(250.00F, destination.Balance);&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;Assert.AreEqual(100.00F, source.Balance);&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;}&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;[Test]&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;[ExpectedException(typeof(BankingProject.Account.InsufficientFundsException))]&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;public void TransferWithInsufficientFunds()&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;{&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;source.TransferFunds(destination, 300.00F);&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;}&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;[Test]&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;[Ignore("Decide how to implement transaction management")]&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;public void TransferWithInsufficientFundsAtomicity()&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;{&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;try&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;{&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;source.TransferFunds(destination, 300.00F);&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;}&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;catch (BankingProject.Account.InsufficientFundsException expected)&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;{&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;}&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;Assert.AreEqual(200.00F, source.Balance);&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;Assert.AreEqual(150.00F, destination.Balance);&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;}&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;}&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;}&lt;/strong&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/iceicys/WindowsLiveWriter/HelloWorld2_8523/clip_image004_3.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="403" alt="clip_image004" src="http://blogs.msdn.com/blogfiles/iceicys/WindowsLiveWriter/HelloWorld2_8523/clip_image004_thumb.jpg" width="489" border="0"&gt;&lt;/a&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;8. Right click on the reference line and click on add a reference. Navigate to your NUnitV2 directory and go into the bin subdirectory. For me this directory is in “C:\Program Files\NUnit-Net-2.0 2.2.4\bin”. Select nunit.framework.dll and click OK.&lt;/p&gt; &lt;p&gt;9. &lt;b&gt;Build&lt;/b&gt; the project by using the Build BankingAccount option in the Build menu. Make sure the build succeeds. &lt;p&gt;10. Start NUnit-GUI. You can find under your windows programs menu. &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/iceicys/WindowsLiveWriter/HelloWorld2_8523/clip_image006%5B6%5D.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="404" alt="clip_image006[6]" src="http://blogs.msdn.com/blogfiles/iceicys/WindowsLiveWriter/HelloWorld2_8523/clip_image006%5B6%5D_thumb.jpg" width="547" border="0"&gt;&lt;/a&gt; &lt;p&gt;11. Go to the Debug folder for your project and select BankingProject.dll. Click &lt;b&gt;Open&lt;/b&gt;. &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/iceicys/WindowsLiveWriter/HelloWorld2_8523/clip_image008%5B4%5D.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="219" alt="clip_image008[4]" src="http://blogs.msdn.com/blogfiles/iceicys/WindowsLiveWriter/HelloWorld2_8523/clip_image008%5B4%5D_thumb.jpg" width="691" border="0"&gt;&lt;/a&gt; &lt;p&gt;12. Click Run. You’re Results should look like this.  &lt;p&gt;13. We now have verified that the Nunit Tests work.  &lt;p&gt;14. In Visual Studio. On the &lt;b&gt;File&lt;/b&gt; menu, navigate to &lt;b&gt;New&lt;/b&gt;, click &lt;b&gt;Project&lt;/b&gt;. Select the appropriate (C# or VB.NET) test project and place it in the directory of your choosing. Name it &lt;b&gt;BankAccountTesting&lt;/b&gt;. . &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/iceicys/WindowsLiveWriter/HelloWorld2_8523/clip_image010%5B4%5D.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="377" alt="clip_image010[4]" hspace="12" src="http://blogs.msdn.com/blogfiles/iceicys/WindowsLiveWriter/HelloWorld2_8523/clip_image010%5B4%5D_thumb.jpg" width="531" border="0"&gt;&lt;/a&gt; &lt;h5&gt;&lt;a&gt;Tests must be in a Test Project&lt;/a&gt;&lt;/h5&gt; &lt;p&gt;Visual Studio 2005 Team System requires that tests be contained in a separate test project. This means that if you had NUnit code in the same project with your production code that you will have to create a new test project and move the test code to the newly created test project.&lt;br&gt;&lt;b&gt;Note: This has implications on the relationship between your test code and production code, especially with regard to visibility. If you had your NUnit test code in the same project than you could share internal access with other classes in that assembly. Since the Visual Studio 2005 Team System tool requires a separate test project you may have to alter the visibility of classes to allow the tests to compile and run. If you do not wish to do this you can consider using the new Assembly attribute: &lt;/b&gt;&lt;b&gt;InternalsVisibleTo which is available in .NET Framework 2.0. For more information on InternalsVisibleTo see &lt;a href="http://hoser.lander.ca/default,date,2005-11-21.aspx"&gt;http://hoser.lander.ca/default,date,2005-11-21.aspx&lt;/a&gt;.&lt;/b&gt; &lt;p&gt;&lt;b&gt;&lt;/b&gt; &lt;p&gt;15. Copy each file that contains NUnit test code, in this case copy BankAccountTest, that you want to be converted into the test project. You can use the Add Existing Item option as well.  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/iceicys/WindowsLiveWriter/HelloWorld2_8523/clip_image012%5B4%5D.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="394" alt="clip_image012[4]" src="http://blogs.msdn.com/blogfiles/iceicys/WindowsLiveWriter/HelloWorld2_8523/clip_image012%5B4%5D_thumb.jpg" width="616" border="0"&gt;&lt;/a&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/iceicys/WindowsLiveWriter/HelloWorld2_8523/clip_image004%5B1%5D.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="349" alt="clip_image004[1]" src="http://blogs.msdn.com/blogfiles/iceicys/WindowsLiveWriter/HelloWorld2_8523/clip_image004%5B1%5D_thumb.jpg" width="423" border="0"&gt;&lt;/a&gt; &lt;p&gt;16. Add any required references (including a reference to NUnit) and compile the test project. Once the code compiles, run the tests in NUnit to ensure that you are starting with a working test harness. This step is optional but I like to do it because if the conversion process introduces problems, I know that I started with a working baseline.  &lt;p&gt;17. Now onto the conversion process. Right-Click the test project &lt;b&gt;BankAcountTesting&lt;/b&gt; in the Solution Explorer. Click the &lt;b&gt;Convert NUnit Test Code&lt;/b&gt;. As each file is being converted it will be opened in Visual Studio. When the conversion is complete, the conversion results will be displayed.  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/iceicys/WindowsLiveWriter/HelloWorld2_8523/clip_image014%5B4%5D.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="485" alt="clip_image014[4]" src="http://blogs.msdn.com/blogfiles/iceicys/WindowsLiveWriter/HelloWorld2_8523/clip_image014%5B4%5D_thumb.jpg" width="273" border="0"&gt;&lt;/a&gt; &lt;p&gt;If you don’t see Convert Nunit Test Code as an option please see Guidance Package Troubleshooting below.  &lt;p&gt;If you get an &lt;b&gt;access denied error&lt;/b&gt; or a &lt;b&gt;path illegal error&lt;/b&gt; or a &lt;b&gt;conversion error&lt;/b&gt;, it is likely that you are not running Visual Studio as an administrator. Close Visual Studio and run visual studio as an administrator. &lt;p&gt;&lt;b&gt;The conversion is not 100% compatible. There are differences that exist between the two testing tools. Some of these can be figured out by the converter and the code adapted to work, others cannot. In all cases the converted code should compile in Visual Studio but there may be instances where the converted tests will not run. These tests will require manual intervention on your part to complete the conversion process.&lt;/b&gt; &lt;p&gt;&lt;b&gt;Guidance Package Troubleshooting &lt;/b&gt; &lt;p&gt;If you don’t see “Convert Nunit Test Code” as an option it is likely that the guidance package is not enabled. Follow these smple steps to verify that the convertor package is enabled. Go to the &lt;b&gt;Tools&lt;/b&gt; menu. Then select &lt;b&gt;Guidance Toolkit Manager&lt;/b&gt;. Click the &lt;b&gt;Enable/Disable package&lt;/b&gt; option. Put a check next to Nunit Test Code Conversion and click &lt;b&gt;Ok&lt;/b&gt;. Click Close. Right-Click the test project &lt;b&gt;BankAcountTesting&lt;/b&gt; in the Solution Explorer. Click the &lt;b&gt;Convert NUnit Test Code&lt;/b&gt;.  &lt;p&gt;If you still don’t see the convert unit Test Code Option, close and relaunch Visual Studio and &lt;b&gt;run as an administrator&lt;/b&gt;.  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/iceicys/WindowsLiveWriter/HelloWorld2_8523/clip_image016%5B4%5D.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="375" alt="clip_image016[4]" src="http://blogs.msdn.com/blogfiles/iceicys/WindowsLiveWriter/HelloWorld2_8523/clip_image016%5B4%5D_thumb.jpg" width="636" border="0"&gt;&lt;/a&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/iceicys/WindowsLiveWriter/HelloWorld2_8523/clip_image018%5B4%5D.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="297" alt="clip_image018[4]" src="http://blogs.msdn.com/blogfiles/iceicys/WindowsLiveWriter/HelloWorld2_8523/clip_image018%5B4%5D_thumb.jpg" width="495" border="0"&gt;&lt;/a&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/iceicys/WindowsLiveWriter/HelloWorld2_8523/clip_image020%5B4%5D.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="294" alt="clip_image020[4]" src="http://blogs.msdn.com/blogfiles/iceicys/WindowsLiveWriter/HelloWorld2_8523/clip_image020%5B4%5D_thumb.jpg" width="498" border="0"&gt;&lt;/a&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/iceicys/WindowsLiveWriter/HelloWorld2_8523/clip_image022_2.gif"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="435" alt="clip_image022" src="http://blogs.msdn.com/blogfiles/iceicys/WindowsLiveWriter/HelloWorld2_8523/clip_image022_thumb.gif" width="313" border="0"&gt;&lt;/a&gt; &lt;p&gt;18. The AccountTest class has now been converted to: &lt;blockquote&gt; &lt;p&gt;&lt;strong&gt;using System;&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;using System.Collections.Generic;&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;using System.Text;&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;using Microsoft.VisualStudio.TestTools.UnitTesting;&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;namespace BankingProject&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;{&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;[TestClass()]&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;public class AccountTest&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;{&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;static Account source;&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;static Account destination;&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;[TestInitialize()]&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;public void Init()&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;{&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;source = new Account();&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;source.Deposit(200.00F);&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;destination = new Account();&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;destination.Deposit(150.00F);&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;}&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;[TestMethod()]&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;public void TransferFunds()&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;{&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;source.TransferFunds(destination, 100.00f);&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;Assert.AreEqual(250.00F, destination.Balance);&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;Assert.AreEqual(100.00F, source.Balance);&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;}&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;[TestMethod(), ExpectedException(typeof(BankingProject.Account.InsufficientFundsException))]&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;public void TransferWithInsufficientFunds()&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;{&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;source.TransferFunds(destination, 300.00F);&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;}&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;[TestMethod(), TestProperty("Reason", "Decide how to implement transaction management"), Ignore()]&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;public void TransferWithInsufficientFundsAtomicity()&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;{&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;try&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;{&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;source.TransferFunds(destination, 300.00F);&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;}&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;catch (BankingProject.Account.InsufficientFundsException expected)&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;{&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;}&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;Assert.AreEqual(200.00F, source.Balance);&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;Assert.AreEqual(150.00F, destination.Balance);&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;}&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;}&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;19. Go to the Test Manager window and you will see the BankAccount Tests have been successfully converted. &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/iceicys/WindowsLiveWriter/HelloWorld2_8523/clip_image024_2.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="134" alt="clip_image024" src="http://blogs.msdn.com/blogfiles/iceicys/WindowsLiveWriter/HelloWorld2_8523/clip_image024_thumb.jpg" width="825" border="0"&gt;&lt;/a&gt; &lt;p&gt;20. Once you have completed the conversion process you should disable the guidance package. The reason is that every time you right-click in the Solution View the guidance package looks for NUnit test code. If there isn’t any to find it just wastes time. On the &lt;b&gt;Tools&lt;/b&gt; menu, click &lt;b&gt;Guidance Package Manager&lt;/b&gt;. A dialog box should open. Click Enable/Disable Packages. You should uncheck “NUnit Test Code Conversion”. Then click &lt;b&gt;OK&lt;/b&gt;. &lt;h4&gt;&lt;a&gt;Differences&lt;/a&gt;&lt;/h4&gt; &lt;p&gt;The following are differences that exist between the two tools from the perspective of someone who is currently writing their tests using NUnit. As I mentioned before some of these differences are handled by the converter and some are not. &lt;h5&gt;&lt;a&gt;.NET Framework 2.0&lt;/a&gt;&lt;/h5&gt; &lt;p&gt;This probably does not need to be mentioned but Visual Studio 2005 Team System only supports projects that target .NET Framework 2.0.  &lt;h5&gt;&lt;a&gt;Tests must be in a Test Project&lt;/a&gt;&lt;/h5&gt; &lt;p&gt;Visual Studio 2005 Team System requires that tests be contained in a separate test project. This means that if you had NUnit code in the same project with your production code that you will have to create a new test project and move the test code to the newly created test project.&lt;br&gt;&lt;b&gt;Note: This has implications on the relationship between your test code and production code, especially with regard to visibility. If you had your NUnit test code in the same project than you could share internal access with other classes in that assembly. Since the Visual Studio 2005 Team System tool requires a separate test project you may have to alter the visibility of classes to allow the tests to compile and run. If you do not wish to do this you can consider using the new Assembly attribute: &lt;/b&gt;&lt;b&gt;InternalsVisibleTo which is available in .NET Framework 2.0. For more information on InternalsVisibleTo see &lt;a href="http://hoser.lander.ca/default,date,2005-11-21.aspx"&gt;http://hoser.lander.ca/default,date,2005-11-21.aspx&lt;/a&gt;. &lt;/b&gt; &lt;h5&gt;&lt;a&gt;New Instance per Test Method&lt;/a&gt;&lt;/h5&gt; &lt;p&gt;One thing you need to take into account immediately is the different style in which Visual Studio 2005 Team System runs your tests. NUnit creates a single instance of a TestFixture class and runs all the Test methods in that single instance. Visual Studio 2005 Team System on the other hand uses a different approach. Instead of resuing one instance for all of the test methods, a new instance of the TestClass is created for each TestMethod contained in the class. This means that if you have 10 TestMethods in a TestClass than 10 instances of the class will be created when the tests are run. There have been arguments both pro/con on the two approaches. The New Instance per Test Method claims to be better at isolating the individual methods. However, since both approaches use classes this can be easily defeated by making all of your member variables static (C#) or shared (VB.NET). In fact that is exactly what the converter does. For example:  &lt;p&gt;&lt;b&gt;&lt;br&gt;&lt;/b&gt; &lt;p&gt;&lt;b&gt;NUnit Code: &lt;/b&gt; &lt;blockquote&gt; &lt;p&gt;&lt;strong&gt;[TestFixture]&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;public class SetUpTests&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;{&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;private int value1;&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;private int value2;&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;[SetUp]&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;public void BeforeTest()&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;{&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;value1 = 2;&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;value2 = 3;&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;}&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;[Test]&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;public void Add()&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;{&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;int result = value1 + value2;&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;Assert.AreEqual(5, result);&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;}&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;}&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;Visual Studio 2005 Team System Code (converterd)&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;[TestClass()]&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;public class SetUpTests&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;{&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;private static int value1;&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;private static int value2;&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;[TestInitialize()]&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;public void BeforeTest()&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;{&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;value1 = 2;&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;value2 = 3;&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;}&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;[TestMethod()]&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;public void Add()&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;{&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;int result = value1 + value2;&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;Assert.AreEqual(5, result);&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;}&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;h4&gt;&lt;a&gt;Note: The reason that the converter changes the variables to static is to preserve the existing behavior. This does not imply that you should use static variables in your new tests. Lastly, you may be able to change them back to instance variables. &lt;/a&gt;&lt;br&gt;&lt;a&gt;Numerical Comparisons&lt;/a&gt;&lt;/h4&gt; &lt;p&gt;The numerical comparisons work in most cases similar in both tools. However, there are instances in Visual Studio 2005 Team System when you compare values of different types that do not work as you might expect. For example,  &lt;p&gt;&lt;b&gt;NUnit Code&lt;/b&gt; &lt;p&gt;[Test] &lt;p&gt;public void Int32Int64Comparison() &lt;p&gt;{ &lt;p&gt;long l64 = 0; &lt;p&gt;int i32 = 0; &lt;p&gt;Assert.AreEqual(i32, l64); &lt;p&gt;} &lt;p&gt;&lt;b&gt;Visual Studio 2005 Team System Code (converterd)&lt;/b&gt; &lt;p&gt;[TestMethod()] &lt;p&gt;public void Int32Int64Comparison() &lt;p&gt;{ &lt;p&gt;long l64 = 0; &lt;p&gt;int i32 = 0; &lt;p&gt;Assert.AreEqual(i32, l64); &lt;p&gt;} &lt;p&gt;While the NUnit version of this test will pass, when the Visual Studio Team System test is run you will get the following result:  &lt;p&gt;Failed Int32Int64Comparison Assert.AreEqual failed. Expected:&amp;lt;0 (System.Int32)&amp;gt;, Actual:&amp;lt;0 (System.Int64)&amp;gt;.  &lt;p&gt;There is also a difference when comparing something against Double.NaN. Here is the NUnit test and the converted Visual Studio Team System test:  &lt;p&gt;&lt;b&gt;NUnit Code&lt;/b&gt; &lt;p&gt;[Test, ExpectedException(typeof(AssertionException))] &lt;p&gt;public void NanEqualsNaNFails() &lt;p&gt;{ &lt;p&gt;Assert.AreEqual(Double.NaN, Double.NaN, 0.0); &lt;p&gt;} &lt;p&gt;&lt;b&gt;Visual Studio 2005 Team System Code (converterd)&lt;/b&gt; &lt;p&gt;[TestMethod(), &lt;br&gt;ExpectedException(typeof(AssertFailedException))] &lt;p&gt;public void NanEqualsNaNFails() &lt;p&gt;{ &lt;p&gt;Assert.AreEqual(Double.NaN, Double.NaN, 0.0); &lt;p&gt;}&lt;b&gt;&lt;/b&gt; &lt;p&gt;NUnit throws AssertionException when you compare Double.NaN to itself. Visual Studio Team System does not throw it’s similar exception which is called AssertFailedException. This may not occur in your test code very often. However it appears to be in direct conflict with the remarks sections of the Double.NaN documention which states the following:  &lt;p&gt;· Use &lt;a href="http://winfx.msdn.microsoft.com/library/en-us/cpref/html/M_System_Double_IsNaN_1_16514d3a.asp"&gt;IsNaN&lt;/a&gt; to determine whether a value is not a number. It is not possible to determine whether a value is not a number by comparing it to another value equal to NaN. &lt;h4&gt;&lt;a&gt;TestFixtureSetUp and TestFixtureTearDown&lt;/a&gt;&lt;/h4&gt; &lt;p&gt;This concept is also supported in Visual Studio 2005 Team System. The attribute names are ClassInitialize and ClassCleanup. The differences are that both methods ClassInitialize and ClassCleanup are static methods on the class and ClassInitialize takes a parameter of type TestContext. &lt;p&gt;&lt;b&gt;NUnit Code&lt;/b&gt; &lt;p&gt;[TestFixture] &lt;p&gt;public class TestFixtureSetUpTests &lt;p&gt;{ &lt;p&gt;private int context; &lt;p&gt;[TestFixtureSetUp] &lt;p&gt;public void BeforeClass() &lt;p&gt;{ &lt;p&gt;context = 12; &lt;p&gt;} &lt;p&gt;[TestFixtureTearDown] &lt;p&gt;public void AfterClass() &lt;p&gt;{ &lt;p&gt;// ... &lt;p&gt;} &lt;p&gt;[Test] &lt;p&gt;public void BeforeClassCalled() &lt;p&gt;{ &lt;p&gt;Assert.AreEqual(12, context); &lt;p&gt;} &lt;p&gt;}&lt;b&gt;&lt;/b&gt; &lt;p&gt;&lt;b&gt;Visual Studio 2005 Team System Code (converterd)&lt;/b&gt; &lt;p&gt;[TestClass()] &lt;p&gt;public class TestFixtureSetUpTests &lt;p&gt;{ &lt;p&gt;private static int context; &lt;p&gt;[ClassInitialize()] &lt;p&gt;public static void BeforeClass(TestContext&lt;br&gt;@__testContext) &lt;p&gt;{ &lt;p&gt;context = 12; &lt;p&gt;} &lt;p&gt;[ClassCleanup()] &lt;p&gt;public static void AfterClass() &lt;p&gt;{ &lt;p&gt;// ... &lt;p&gt;} &lt;p&gt;[TestMethod()] &lt;p&gt;public void BeforeClassCalled() &lt;p&gt;{ &lt;p&gt;Assert.AreEqual(12, context); &lt;p&gt;} &lt;p&gt;} &lt;p&gt;The converter changes the member variables to be static and then modifies the signatures of both methods to conform to signatures required in Visual Studio 2005 Team System. The test succeeds after the conversion.  &lt;h4&gt;&lt;a&gt;Ignore a Test&lt;/a&gt;&lt;/h4&gt; &lt;p&gt;Both tools have the concept of ignoring a test. NUnit provides a field to describe why the test is being ignored; Visual Studio 2005 Team System does not.  &lt;p&gt;&lt;b&gt;NUnit Code&lt;/b&gt; &lt;p&gt;[TestFixture] &lt;p&gt;public class IgnoreMethodTests &lt;p&gt;{ &lt;p&gt;[Test, Ignore("ignored test")] &lt;p&gt;public void IgnoredTest() &lt;p&gt;{ &lt;p&gt;throw new Exception(); &lt;p&gt;} &lt;p&gt;}&lt;b&gt;&lt;/b&gt; &lt;p&gt;&lt;b&gt;Visual Studio 2005 Team System Code (converterd)&lt;/b&gt; &lt;p&gt;[TestClass()] &lt;p&gt;public class IgnoreMethodTests &lt;p&gt;{ &lt;p&gt;[TestMethod(), TestProperty("Reason", "ignored test"), &lt;br&gt;Ignore()] &lt;p&gt;public void IgnoredTest() &lt;p&gt;{ &lt;p&gt;throw new Exception(); &lt;p&gt;} &lt;p&gt;} &lt;h5&gt;&lt;a&gt;As you can see, the converter preserves the reason text by setting the “Reason” TestProperty. However, when the test is run this will not be present in the output.&lt;/a&gt;&lt;/h5&gt; &lt;h4&gt;&lt;a&gt;Ignore a TestFixture&lt;/a&gt;&lt;/h4&gt; &lt;p&gt;Both tools have the concept of ignoring all the tests in a test fixture. Similar to ignoring a test method NUnit provides a field to describe why the TestFixture is being ignored; Visual Studio 2005 Team System does not support a reason field.  &lt;p&gt;&lt;b&gt;NUnit Code&lt;/b&gt; &lt;p&gt;[TestFixture, Ignore("Testing Conversion")] &lt;p&gt;public class IgnoreTestFixtureTests &lt;p&gt;{ &lt;p&gt;[Test] &lt;p&gt;public void TestInsideIgnoredTestFixture() &lt;p&gt;{ &lt;p&gt;throw new Exception(); &lt;p&gt;} &lt;p&gt;} &lt;p&gt;&lt;b&gt;Visual Studio 2005 Team System Code (converterd)&lt;/b&gt; &lt;p&gt;[TestClass(), Ignore()] &lt;p&gt;public class IgnoreTestFixtureTests &lt;p&gt;{ &lt;p&gt;[TestMethod()] &lt;p&gt;public void TestInsideIgnoredTestFixture() &lt;p&gt;{ &lt;p&gt;throw new Exception(); &lt;p&gt;} &lt;h5&gt;&lt;a&gt;}&lt;/a&gt;&lt;/h5&gt; &lt;h5&gt;&lt;a&gt;In this case, the converter can not preserve the reason text because there is no way to set a TestProperty at the class level.&lt;/a&gt;&lt;/h5&gt; &lt;h4&gt;&lt;/h4&gt; &lt;h4&gt;&lt;a&gt;Assert.Equals/Assert.ReferenceEquals&lt;/a&gt;&lt;/h4&gt; &lt;p&gt;When we were writing NUnit people would often get confused about using the Equals method on the Assert class. Less likely was the use of ReferenceEquals. However, it did happen. In order to make sure there was no confusion we overrode Equals and ReferenceEquals to throw AssertionException. The following tests depict this behavior.  &lt;p&gt;Visual Studio Team System does not mimic this behavior, so any tests that are dependent on it will fail as the following example illustrates.  &lt;p&gt;&lt;b&gt;NUnit Code&lt;/b&gt; &lt;p&gt;[Test] &lt;p&gt;[ExpectedException(typeof(AssertionException))] &lt;p&gt;public void EqualsThrowsException() &lt;p&gt;{ &lt;p&gt;object o = new object(); &lt;p&gt;Assert.Equals(o, o); &lt;p&gt;} &lt;p&gt;[Test] &lt;p&gt;[ExpectedException(typeof(AssertionException))] &lt;p&gt;public void ReferenceEqualsThrowsException() &lt;p&gt;{ &lt;p&gt;object o = new object(); &lt;p&gt;Assert.ReferenceEquals(o, o); &lt;p&gt;} &lt;p&gt;&lt;b&gt;Visual Studio 2005 Team System Code (converterd)&lt;/b&gt; &lt;p&gt;[TestMethod(), &lt;br&gt;ExpectedException(typeof(AssertFailedException))] &lt;p&gt;public void EqualsThrowsException() &lt;p&gt;{ &lt;p&gt;object o = new object(); &lt;p&gt;Assert.Equals(o, o); &lt;p&gt;} &lt;p&gt;[TestMethod(), &lt;br&gt;ExpectedException(typeof(AssertFailedException))] &lt;p&gt;public void ReferenceEqualsThrowsException() &lt;p&gt;{ &lt;p&gt;object o = new object(); &lt;p&gt;Assert.ReferenceEquals(o, o); &lt;p&gt;} &lt;p&gt;When you run the converted tests you get the following test failures: &lt;p&gt;Test method Microsoft.Practices.ConversionTest.Samples.AreEqualTests.EqualsThrowsException did not throw expected exception.&lt;br&gt;Test method Microsoft.Practices.ConversionTest.Samples.AreEqualTests.ReferenceEqualsThrowsException did not throw expected exception. &lt;h4&gt;&lt;a&gt;ExpectedException&lt;/a&gt;&lt;/h4&gt; &lt;p&gt;There are a number of differences with regard to how ExpectedException works between the tools. The first and most obvious is that in NUnit you can verify that the message in the thrown exception is what you are expecting. Since this is not a supported scenario is Visual Studio 2005 Team System the resulting code is very different than a simple translation.  &lt;p&gt;&lt;b&gt;Note: Not every ExpectedException attribute is converted like the following. If you do not look for the message the code will look identical between the two tools&lt;/b&gt;.  &lt;p&gt;&lt;b&gt;NUnit Code&lt;br&gt;&lt;/b&gt; &lt;p&gt;[Test, ExpectedException(&lt;br&gt;typeof(InvalidOperationException), "message")] &lt;p&gt;public void ExceptionWithMessage() &lt;p&gt;{ &lt;p&gt;throw new InvalidOperationException("message"); &lt;p&gt;}&lt;b&gt;&lt;br&gt;&lt;/b&gt;&lt;b&gt;&lt;br&gt;Visual Studio 2005 Team System Code (converterd)&lt;/b&gt; &lt;p&gt;[TestMethod()] &lt;p&gt;public void ExceptionWithMessage() &lt;p&gt;{ &lt;p&gt;try &lt;p&gt;{ &lt;p&gt;throw new&lt;br&gt;InvalidOperationException("message"); &lt;p&gt;Assert.Fail(…); &lt;p&gt;} &lt;p&gt;catch (InvalidOperationException exception) &lt;p&gt;{ &lt;p&gt;Assert.AreEqual("message", exception.Message); &lt;p&gt;} &lt;p&gt;} &lt;h5&gt;&lt;a&gt;The next difference to consider is that Visual Studio 2005 Team System will not allow you to expect the class &lt;/a&gt;System.Exception. For example,&lt;/h5&gt; &lt;p&gt;&lt;b&gt;NUnit Code&lt;br&gt;&lt;/b&gt; &lt;p&gt;[Test] &lt;p&gt;[ExpectedException(typeof(Exception))] &lt;p&gt;public void ExpectException() &lt;p&gt;{ &lt;p&gt;throw new Exception(); &lt;p&gt;}&lt;b&gt;&lt;br&gt;&lt;/b&gt;&lt;b&gt;&lt;br&gt;Visual Studio 2005 Team System Code (converterd)&lt;/b&gt; &lt;p&gt;[TestMethod(), ExpectedException(typeof(Exception))] &lt;p&gt;public void ExpectException() &lt;p&gt;{ &lt;p&gt;throw new Exception(); &lt;p&gt;} &lt;h5&gt;&lt;a&gt;The test compiles and runs successfully in NUnit. However when I run the converted code in Visual Studio 2005 Team System I get the following result:&lt;/a&gt;&lt;/h5&gt; &lt;p&gt;UTA017: Microsoft.Practices.ConversionTest.Samples.ExpectedExceptionTests.ExpectException has invalid ExpectedException attribute. The type must inherit from Exception. &lt;p&gt;The last difference to point out with regard to ExpectedException is a capability that Visual Studio 2005 Team System has that is not present in NUnit. The Visual Studio 2005 Team System will allow you to expect exceptions that are contained as inner exceptions. Here is the example,  &lt;p&gt;&lt;b&gt;NUnit Code&lt;br&gt;&lt;/b&gt; &lt;p&gt;[Test] &lt;p&gt;[ExpectedException(typeof(InvalidOperationException))] &lt;p&gt;public void FindingInnerException() &lt;p&gt;{ &lt;p&gt;Exception innerException =  &lt;p&gt;new InvalidOperationException("message"); &lt;p&gt;throw new&lt;br&gt;TargetInvocationException(innerException);  &lt;p&gt;}&lt;b&gt;&lt;br&gt;&lt;/b&gt;&lt;b&gt;&lt;br&gt;&lt;/b&gt;&lt;b&gt;Visual Studio 2005 Team System Code (converterd)&lt;/b&gt; &lt;p&gt;[TestMethod(), &lt;br&gt;ExpectedException(typeof(InvalidOperationException))] &lt;p&gt;public void FindingInnerException() &lt;p&gt;{ &lt;p&gt;Exception innerException =  &lt;p&gt;new InvalidOperationException("message"); &lt;p&gt;throw new&lt;br&gt;TargetInvocationException(innerException);  &lt;p&gt;} &lt;h5&gt;&lt;a&gt;When I run this test in NUnit I get the following failure:&lt;/a&gt;&lt;/h5&gt; &lt;p&gt;Microsoft.Practices.ConversionTest.Samples.ExpectedExceptionTests.FindingInnerException : Expected: InvalidOperationException but was TargetInvocationException &lt;h5&gt;&lt;a&gt;When the converted test is run in Visual Studio 2005 Team System it passes. I point this out because if you are used to the way that NUnit expects exception you might be surprised to have the code behave in a different fashion in Visual Studio.&lt;/a&gt;&lt;/h5&gt; &lt;h4&gt;&lt;a&gt;Abstract Test Case&lt;/a&gt;&lt;/h4&gt; &lt;p&gt;There are a number of times when it makes sense to move test methods to an abstract base class. The example that comes to mind is that you are writing tests for an interface. The tests in the base class describe the common behavior for all of the class that implements an interface. The tests in the derived classes only test behavior that is specific to that instance. Let’s begin by looking at an example in NUnit:  &lt;p&gt;&lt;b&gt;NUnit Code&lt;/b&gt; &lt;p&gt;public abstract class BaseFixtureWithSharedTests &lt;p&gt;{ &lt;p&gt;protected int baseValue; &lt;p&gt;[SetUp] &lt;p&gt;protected virtual void BeforeTest() &lt;p&gt;{ &lt;p&gt;baseValue = 12; &lt;p&gt;} &lt;p&gt;[Test] &lt;p&gt;public void TestInBaseClass() &lt;p&gt;{ &lt;p&gt;Assert.AreEqual(12, baseValue); &lt;p&gt;} &lt;p&gt;} &lt;p&gt;[TestFixture] &lt;p&gt;public class InheritedTestFixture : &lt;br&gt;BaseFixtureWithSharedTests &lt;p&gt;{ &lt;p&gt;[Test] &lt;p&gt;public void DerivedTest() &lt;p&gt;{ &lt;p&gt;Assert.AreEqual(12, baseValue); &lt;p&gt;} &lt;p&gt;} &lt;p&gt;[TestFixture] &lt;p&gt;public class InheritedTestFixture2 : &lt;br&gt;BaseFixtureWithSharedTests &lt;p&gt;{ &lt;p&gt;[Test] &lt;p&gt;public void DerivedTest() &lt;p&gt;{ &lt;p&gt;Assert.AreEqual(12, baseValue); &lt;p&gt;} &lt;p&gt;} &lt;h3&gt;&lt;a&gt;When I run these tests in NUnit I get the following results:&lt;/a&gt;&lt;/h3&gt; &lt;p&gt;· InheritedTestFixture &lt;p&gt;o DerivedTest &lt;p&gt;o TestInBaseClass &lt;p&gt;· InheritedTestFixture2 &lt;p&gt;o DerivedTest &lt;p&gt;o TestInBaseClass &lt;p&gt;In short I get 4 tests because the [TestMethod] TestInBaseClass is considered part of the derived class. When I run the converter on the code I get the following:  &lt;p&gt;&lt;b&gt;Visual Studio 2005 Team System Code (converterd)&lt;/b&gt; &lt;p&gt;public abstract class&lt;br&gt;BaseFixtureWithSharedTestsDerivedAttribute &lt;p&gt;{ &lt;p&gt;protected static int baseValue; &lt;p&gt;[TestInitialize()] &lt;p&gt;public virtual void BeforeTest() &lt;p&gt;{ &lt;p&gt;baseValue = 12;  &lt;p&gt;} &lt;p&gt;[TestMethod()] &lt;p&gt;public void TestInBaseClass() &lt;p&gt;{ &lt;p&gt;Assert.AreEqual(12, baseValue); &lt;p&gt;} &lt;p&gt;} &lt;p&gt;[TestClass()] &lt;p&gt;public class InheritedTestFixtureDerivedAttribute : &lt;br&gt;BaseFixtureWithSharedTestsDerivedAttribute &lt;p&gt;{ &lt;p&gt;[TestMethod()] &lt;p&gt;public void DerivedTest()  &lt;p&gt;{ &lt;p&gt;Assert.AreEqual(12, baseValue); &lt;p&gt;} &lt;p&gt;} &lt;p&gt;[TestClass()] &lt;p&gt;public class InheritedTestFixture2DerivedAttribute : &lt;br&gt;BaseFixtureWithSharedTestsDerivedAttribute &lt;p&gt;{ &lt;p&gt;[TestMethod()] &lt;p&gt;public void DerivedTest() &lt;p&gt;{ &lt;p&gt;Assert.AreEqual(12, baseValue); &lt;p&gt;} &lt;p&gt;} &lt;p&gt;The conversion yields 3 tests instead of 4. When I run the tests the two test methods defind in the derived classes run and succeed. The test in the base class yields the following not-runnable message:  &lt;p&gt;UTA003: TestClass attribute defined on abstract class Microsoft.Practices.ConversionTest.Samples.BaseFixtureWithSharedTestsDerivedAttribute &lt;h3&gt;&lt;a&gt;The upside shown in this example is that you can move common initialization methods into base classes. The only caveat is that the &lt;/a&gt;TestClass attribute must be on the furthest most derived class for this to work. The downside is that you cannot move test methods into abstract classes. Here is an example that just demonstrates that common initialization can be moved into a base class:&lt;/h3&gt; &lt;p&gt;&lt;b&gt;NUnit Code&lt;/b&gt; &lt;p&gt;public abstract class BaseSetUpFixture &lt;p&gt;{ &lt;p&gt;protected int value1; &lt;p&gt;protected int value2; &lt;p&gt;[SetUp] &lt;p&gt;public void BeforeTest() &lt;p&gt;{ &lt;p&gt;value1 = 12; &lt;p&gt;value2 = 30;  &lt;p&gt;} &lt;p&gt;} &lt;p&gt;[TestFixture] &lt;p&gt;public class DerivedBaseSetUpFixture : BaseSetUpFixture &lt;p&gt;{ &lt;p&gt;[Test] &lt;p&gt;public void ComputeTest() &lt;p&gt;{ &lt;p&gt;Assert.AreEqual(42, value1 + value2); &lt;p&gt;} &lt;h3&gt;&lt;a&gt;}&lt;/a&gt;&lt;/h3&gt; &lt;p&gt;&lt;b&gt;Visual Studio 2005 Team System Code (converterd)&lt;/b&gt; &lt;p&gt;public abstract class BaseSetupFixtureDerivedAttribute &lt;p&gt;{ &lt;p&gt;protected static int value1; &lt;p&gt;protected static int value2; &lt;p&gt;[TestInitialize()] &lt;p&gt;public void BeforeTest() &lt;p&gt;{ &lt;p&gt;value1 = 12; &lt;p&gt;value2 = 30; &lt;p&gt;} &lt;p&gt;} &lt;p&gt;[TestClass()] &lt;p&gt;public class DerivedBaseSetupFixtureNoAttribute : &lt;br&gt;BaseSetupFixtureDerivedAttribute &lt;p&gt;{ &lt;p&gt;[TestMethod()] &lt;p&gt;public void ComputeTest() &lt;p&gt;{ &lt;p&gt;Assert.AreEqual(42, value1 + value2); &lt;p&gt;} &lt;h3&gt;&lt;a&gt;}&lt;/a&gt;&lt;/h3&gt; &lt;h3&gt;&lt;a&gt;In this case the test runs successfully. We can conclude that Visual Studio 2005 Team System does not support the abstract test case pattern. The converter does a best effort job at converting the code but complete conversion is beyond the scope of the automated converter. If it did try and convert the code completely it would likely yield code that would be undesirable and almost certainly less recognizable to the programmer. Even though VSTS does not support test methods in abstract base classes it does allow for common initialization and cleanup methods to be contained in base classes. The only thing you may have to do to your code to enable this is to move the &lt;/a&gt;TestFixture attribute from the base class to the furthest most derived classes which has no effect on the NUnit code.&lt;/h3&gt; &lt;p&gt;Category Attribute on a Test&lt;br&gt;The Category attribute which was added in NUnit 2.2 is not supported in Visual Studio 2005 Team System. Once again, I did not want lose information in the conversion so I decided to make the category a TestProperty on the converted test method. What is lost in the conversion is the ability to run tests based on a category. A future enhancement might be to create a test list associated with the category. The issue with doing this at the moment is that in the developer suite there is no mechanism to run or create test lists. This functionality is only present in the Test Suite of Visual Studio 2005 Team System. Here is an example&lt;b&gt;. &lt;/b&gt;&lt;b&gt;&lt;/b&gt; &lt;p&gt;&lt;b&gt;NUnit Code&lt;/b&gt; &lt;p&gt;[TestFixture] &lt;p&gt;public class CategoryTests &lt;p&gt;{ &lt;p&gt;[Test, Category("sample")] &lt;p&gt;public void NormalAssert() &lt;p&gt;{ &lt;p&gt;Assert.AreEqual(2, 2); &lt;p&gt;} &lt;p&gt;}&lt;b&gt;&lt;/b&gt; &lt;p&gt;&lt;b&gt;Visual Studio 2005 Team System Code (converterd)&lt;/b&gt; &lt;p&gt;[TestClass()] &lt;p&gt;public class CategoryTests &lt;p&gt;{ &lt;p&gt;[TestMethod(), TestProperty("Category", "sample")] &lt;p&gt;public void NormalAssert() &lt;p&gt;{ &lt;p&gt;Assert.AreEqual(2, 2); &lt;p&gt;} &lt;p&gt;} &lt;p&gt;The test runs as expected in both tools. However, you do lose the ability to run tests by Category by using Visual Studio 2005 Team System when using the converted code.  &lt;h4&gt;&lt;a&gt;Category Attribute on a Class&lt;/a&gt;&lt;/h4&gt; &lt;p&gt;NUnit 2.2 also allows you to put a Category attribute on a TestFixture. There is no corollary in Visual Studio 2005 Team System. In fact this conversion is even more invasive because there is no equivalent of TestProperty at the class level. Here is the example:  &lt;p&gt;&lt;b&gt;NUnit Code&lt;/b&gt; &lt;p&gt;[TestFixture, Category("sample")] &lt;p&gt;public class CategoryTestFixtureTests &lt;p&gt;{ &lt;p&gt;[Test] &lt;p&gt;public void NormalAssert() &lt;p&gt;{ &lt;p&gt;Assert.AreEqual(2, 2); &lt;p&gt;} &lt;p&gt;}&lt;b&gt;&lt;/b&gt; &lt;p&gt;&lt;b&gt;Visual Studio 2005 Team System Code (converterd)&lt;/b&gt; &lt;p&gt;// Category: "sample" &lt;p&gt;[TestClass()] &lt;p&gt;public class CategoryTestFixtureTests &lt;p&gt;{ &lt;p&gt;[TestMethod()] &lt;p&gt;public void NormalAssert() &lt;p&gt;{ &lt;p&gt;Assert.AreEqual(2, 2); &lt;p&gt;} &lt;p&gt;} &lt;p&gt;Because of my desire to make sure that information is not being lost in conversion I decided to just write the Category as a comment. This is obviously not ideal but if there is a better solution I am open to changing the converter.  &lt;h4&gt;&lt;a&gt;Assert.Ignore&lt;/a&gt;&lt;/h4&gt; &lt;p&gt;This was also a feature added to NUnit 2.2. This would allow you to ignore a test based on run-time information as opposed to compile-time information. This feature is not supported in Visual Studio 2005 Team System directly. Here is an example.  &lt;p&gt;&lt;b&gt;NUnit Code&lt;/b&gt; &lt;p&gt;[Test] &lt;p&gt;public void AssertIgnore() &lt;p&gt;{ &lt;p&gt;Assert.Ignore(); &lt;p&gt;} &lt;p&gt;[Test] &lt;p&gt;public void AssertIgnoreMessage() &lt;p&gt;{ &lt;p&gt;Assert.Ignore("message"); &lt;p&gt;}&lt;b&gt;&lt;/b&gt; &lt;p&gt;&lt;b&gt;Visual Studio 2005 Team System Code (converterd)&lt;/b&gt; &lt;p&gt;[TestMethod()] &lt;p&gt;public void AssertIgnore() &lt;p&gt;{ &lt;p&gt;Assert.Inconclusive(); &lt;p&gt;} &lt;p&gt;[TestMethod()] &lt;p&gt;public void AssertIgnoreMessage() &lt;p&gt;{ &lt;p&gt;Assert.Inconclusive("message"); &lt;p&gt;} &lt;p&gt;The conversion process converts the Assert.Ignore to be Assert.Inconclusive which is not exactly ignoring the test but it does cause the test to provide a different result.  &lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=5546860" width="1" height="1"&gt;</content><author><name>Ianceicys</name><uri>http://blogs.msdn.com/members/Ianceicys.aspx</uri></author></entry><entry><title>Hello World2</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/iceicys/archive/2007/10/20/hello-world2.aspx" /><id>http://blogs.msdn.com/iceicys/archive/2007/10/20/hello-world2.aspx</id><published>2007-10-20T16:42:39Z</published><updated>2007-10-20T16:42:39Z</updated><content type="html">&lt;p&gt;This is a test. Hello World
&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.futurebluebadgers.com/world.jpg"&gt;http://www.futurebluebadgers.com/world.jpg&lt;/a&gt;
	&lt;/p&gt;&lt;p&gt;
	&lt;/p&gt;&lt;p&gt;  &lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=5546257" width="1" height="1"&gt;</content><author><name>Ianceicys</name><uri>http://blogs.msdn.com/members/Ianceicys.aspx</uri></author></entry></feed>