Getting back into a bit more .NET after a few-years of not using it full-time, and wondering what the good unit testing packages are these days.
I’m familiar with NUnit (a few years ago), and have played briefly around with IronRuby, with the goal of getting something like rspec going, but don’t know much beyond that.
I realize I could google for this and call it a day but I believe I’m likely to get a better and more informed response from asking a question here 🙂
There are so many it’s crazy. Crazy good, I guess.
- For the conservative types (me), NUnit is still available and still more than capable.
- For the Microsoft-types, MSTest is adequate, but slow and clunky compared to Nunit. It also lacks code coverage without paying the big bucks for the pricey versions of Visual Studio.
- There’s also MbUnit. It’s like NUnit, but has nifty features like RowTest (run the same test with different parameters) and Rollback (put the database back like you found it after a test)
- And finally, xUnit.net is the trendy option with some attitude.
- Oh, and TestDriven.NET will give you IDE integration for both Nunit and MBunit.
I’m sure they’re all just fine. I’d steer away from MSTest though, unless you just enjoy the convenience of having everything in one IDE out of the box.
Scott Hanselman has a podcast on this very topic.
Stick to NUnit. Don’t go anywhere near MSTest.
NUnit + ReSharper is an absolute joy to work with.
I used to use NUnit, but now tend to use MbUnit, for two key features:
1. The RowTest feature allows you to easily run the same test on different sets of parameters, which is important if you really want thorough coverage.
2. The Rollback feature allows you to run tests against your database while rolling back changes after every test, keeping your database in exactly the same state every time. And it’s as easy as adding the [Rollback] attribute.
Another nice aspect of MbUnit is that its syntax is nearly identical to NUnit, so if you have a whole test bed already in place under NUnit, you can just switch out the references without the need to change any (very much?) code.
xUnit.net looks like it provides a slightly different approach to N/MB/MS/Unit, which is interesting.
In my search for an rspec-like solution (because I LOVE the rspec), I also came across NSpec, which looks a bit wordy, but combined with the NSpec Extensions addon to use C#3 extension methods, it looks pretty nice.
I use the following:
TestDriven.NET – Unit Testing add on for Visual Studio
Typemock Isolator– Mocking framework for .Net Unit Testing
NUnit – An open source unit testing framework that is in C#.
This is an old question but you might find it interesting that Gallio v3.1 now supports RSpec via IronRuby.
I like TestDriven.NET (even though I use ReSharper) and I’m pretty happy with XUnit.net. It uses Facts instead of Tests which many people dislike but I like the difference in terminology. It’s useful to think of a collection of automatically provable Facts about your software and see which ones you violate when you make a change.
Be aware that Visual Studio 2008 Professional (and above) now comes with integrated Unit Testing (it used to be available only with the Team System Editions) and may be suitable for your needs.
I have made a small example of testing a .net lib using ironRuby:
I like MbUnit, er, Gallio. Most importantly to me is having good tools support inside Visual Studio. For that I use Resharper, which has an MbUnit test runner. A lot of folks seem to like TestDriven.NET as their test runner as well.
I used to use NUnit, but I switched to MbUnit since it has more features. I love RowTest. It lets you parametrize your tests. NUnit does have a litter bit better tool support though. I am using ReSharper to run MbUnit Tests. I’ve had problems with TestDriven.NET running my SetUp methods for MbUnit.
This is really a personal opinion on my part (I guess that’s redundant since it is a forum). NUnit, MSTest, ect all do pretty mutch the same thing. However I find NMock indispensable.
NMock or any mocking package is not unit testing but it makes it so much easier to do unit testing that it mught as well be.