Browsing Posts published in March, 2007

Another episode airs and provides further proof that the dolphins have been right all along… You can download it from here.

The second annual Calgary Code Camp will be happening on Saturday, April 28, 2007. In case you weren’t there last year, you might be wondering, “What is a Code Camp?” Simply put, a Code Camp is a developer event by and for the developer community. You get a full day of developer-focused content created by fellow developers, not marketing wonks. You’ll see code, code, and more code. The sessions will cover a wide variety of topics, including current Microsoft technologies (ASP.NET, AJAX, Windows Forms, WPF, WCF, WF) as well as upcoming technologies (LINQ, WPF/e). We will also be looking for presentations on TDD, NHibernate, Castle Windsor, MonoRail, Spring.NET, and more.

The price for the event is the same as last year – COMPLETELY FREE! A full day of code and fun with cool door prizes for absolutely nothing. We’ll be posting speakers and sessions on the website as they’re confirmed. Drop by the Calgary Code Camp Website and sign-up. See you there!!!

Call for Speakers!

If you would like to speak at the event, please send a brief description of yourself and your topic to jkovacs@post.harvard.edu. Deadline is April 7, 2007.

Call for Sponsors!

If you are interested in sponsoring the Calgary Code Camp, please contact me at jkovacs@post.harvard.edu.

We’re back! Latest episode is here.

Show Notes

The TechEd 2007 Birds of a Feather (BOF) voting is now online. Go vote for your favourite sessions. Might I humbly suggest that you consider placing a vote for my BOF:

Creating Flexible Software: TDD, Mocking, and Dependency Injection

There has been much discussion of agile development techniques, but what do they really mean? How can they help you develop better software that is more flexible in the face of change? What does it mean for software to be flexible? This Birds of a Feather session will promote a lively discussion of how to be successful in creating software that is resilient in the face of ever-changing business requirements.

Over the past few months, I’ve been doing test-driven development (TDD) using VstsUnit (aka MSTest), which ships with Visual Studio Team System. (A client’s choice to use VstsUnit, not mine.) I’m an avid ReSharper user and quite like their unit test runner, which allows you to run NUnit or csUnit tests directly from within Visual Studio. Unfortunately it doesn’t support VstsUnit. When Albert Weinert released MbUnit support for ReSharper a few months back, I realized that JetBrains had an undocumented plugin model for their unit test runner and I could integrate support for VstsUnit into ReSharper. Without further ado, I present to you the VstsUnit Plugin for ReSharper.

VstsUnit Plugin for ReSharper

Out of the box, JetBrains ReSharper Unit Test Runner supports NUnit and csUnit. This ReSharper plugin adds support for the Unit Testing Framework in Visual Studio Team System (VstsUnit), also known as MSTest.

N.B. The plugin will likely work with JetBrains UnitRun, but I have not taken the time to test it with UnitRun. Unfortunately you cannot have ReSharper and UnitRun installed at the same time, which means I need to set up a virtual machine with Visual Studio 2005 and JetBrains UnitRun. I have not taken the time to do this yet.

Installation

  1. Close Visual Studio 2005.
  2. Extract the contents of archive, including the VstsUnit folder, to:
    %ProgramFiles%\JetBrains\ReSharper\VS2005\Plugins
  3. Launch Visual Studio 2005.
  4. Open a project containing VstsUnit tests.
  5. Open a test file containing a TestClass with TestMethods. Standard ReSharper icons will appear in the left margin and allow you to run the unit tests.

Known Issues

ReSharper Unit Test Runner icons do not appear beside TestClass and TestMethod.
This is typically caused by having an assembly reference to another unit test framework. ReSharper Unit Test Runner (and UnitRun) only support a single unit test framework per test assembly. Remove references to NUnit.Framework, csUnit, and/or MbUnit.Framework from the References in your test project. This is a known limitation in the JetBrains’ current unit test runner implementation. A plugin votes on whether the current assembly contains tests that it can run. If the plugin votes “yes”, the unit test runner stops querying additional plugins. NUnit and csUnit get queried before third-party plugins.
Poor performance when running full test suite.
Unit tests are run by invoking mstest.exe and parsing the resulting XML file (.trx). The Unit Test Runner invokes the plugin once for every TestClass (aka TestFixture in NUnit terms). Unfortunately MSTest has high overhead as it copies all files to a new directory to execute tests. There is no way to turn off this behaviour in MSTest. It may be possible to run the full suite of tests and cache the results, but there are numerous problems with this approach including determining whether the cache is fresh and keeping TestClass or TestMethod runs responsive. Due to the architecture of MSTest, it is not possible (without what would likely be some truly awful System.Reflection work) to run the unit tests in-process as is done for NUnit and csUnit.
Cannot debug or profile VstsUnit tests.
I have not found a way to hook the debugger or profiler to the MSTest process. Hopefully this will be possible in a future version.