Thomas Ardal

Entrepreneur and founder of elmah.io

Essential c# unit testing tools

During the last 6 years, I’ve preached unit testing to my colleagues and people attending my test-driven development courses. The set of tools I’ve used for this purpose have been stable, for the most part. This blog post is an attempt to create a snapshot of the tools and frameworks I’m using right now.

Unit-Test Framework and Runner

NUnit has been my preferred tool to execute tests. I did some fooling around with MSTest a couple of years ago, but unlike NUnit, you need to install Visual Studio on the build server to run the tests. The syntax is strange and the test runner for Visual studio sucks. I also looked at xUnit.net which is cool, but the limited support for ReSharper at the time kept me from switching. Let’s admit it: NUnit is the defacto standard these days. The support and community around NUnit is so great, that I will probably not switch anytime soon. I really hope that NUnit looks into the cool things happening in xUnit.net. I also hope that build servers, Visual Studio extensions and other tools integrating unit test frameworks will do a better job of integrating xUnit.net.

Mocking Framework

Rhino Mocks has been my favorite mocking framework for years. I tried Moq two years ago, but quickly switched back to Rhino Mocks due to the strange errors I was receiving from Moq. Last year, I tried Moq again and liked it so much that this is now my favorite mocking framework. I also tried FakeItEasy, but I didn’t really think that it brought anything new to the table.

Buildserver

You might be thinking something like, “Whuuut? Why does the unit-test freak suddenly mention anything about build servers, in the middle of a blog post about unit-testing tools?” Well, without a build server to execute all of your unit-tests, you probably shouldn’t write them in the first place. The build server is a perfect place for conducting regression testing. I typically run all of my unit-tests before committing code, letting the build server run the heavy database-dependent integration-tests. During the last 10 years as a professional software developer, I’ve tried practically all major build servers from homemade bat-scripts over CruiseControl and CruiseControl.NET to TeamCity. TeamCity is my current favorite, with great support for .NET/C#.

Helpers

Also, last year I started using AutoFixture, which is a cool library used to automate the creation of test values. I blogged about AutoFixture a couple of times.

Shouldly is a nice set of extension methods for NUnit if you do not like the Assert.* syntax. I previously blogged about Shouldly as well.

Any opinions on missing frameworks?

Show Comments