views:

2194

answers:

12

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 realise 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 :-)

Suggestions?

A: 

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.

Brett Veenstra
+2  A: 

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.

Wolfbyte
+31  A: 

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.

Brad Tutterow
+1, note NUnit 2.5 has the nice RowTest features, plus Combinatorial testing of arguments, etc.
sixlettervariables
The difference between MSTest and NUnit are not that big if you ask me. It mostly boils down to preferred syntax and if you use TesteDriven.Net, which also supports MSTest, the performance is pretty much the same.
Kjetil Klaussen
Aye, NUnit 2.5 has RowTest features via the [TestCase] attribute.
Richard Szalay
+3  A: 

Thanks for those

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.

Orion Edwards
+4  A: 

We use NUnit and MBUnit here. We use TestDriven.NET to run the unit tests from within Visual Studio. We use the excellent, highly recommended RhinoMocks as a mock framework.

Judah Himango
+1  A: 

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.

Lance Fisher
+1  A: 

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.

Dan Blair
+4  A: 

Stick to NUnit. Don't go anywhere near MSTest.

NUnit + ReSharper is an absolute joy to work with.

IainMH
Why should you stear away from MSTest? I'd appreciate if you'd actually bothered to share WHY you wanna stear away from it. And R# works with MSTest as well (with the Gallio plugin).
Kjetil Klaussen
Hi Kjetil. It's mainly for three reasons. 1. The meta-data that the MS tests create. Why? Reflect like NUnit. 2. The test runner is horrid. 3. NUnit does everything better - why change. I did for a while but then changed back.
IainMH
I also very much concur with the accepted answer. MS test is slow and clunky. Why repeat what's already been answered?
IainMH
I've also encountered various bugs with the MS test "runner". Basically VS leaves it running in the background and under certain circumstances tests you ran 10 minutes ago can interfere with the one you're about to run right now :-(
Orion Edwards
+4  A: 

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.

Doug R
+1  A: 

I have made a small example of testing a .net lib using ironRuby: http://khebbie.dk/post/2008/08/Example-of-using-ironRubys-mini_rspec-library.aspx

khebbie
Thanks for that. I've actually played around with this extensively myself. Unfortunately IronRuby isn't capable of running full rspec yet, only mspec, which is a lot more cut down. Even so, it's nicer than nunit/etc :-)
Orion Edwards
+2  A: 

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#.

+1  A: 

This is an old question but you might find it interesting that Gallio v3.1 now supports RSpec via IronRuby.

Jeff Brown