.NET unit testing packages

10,639

Solution 1

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 it is 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 it 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.

Solution 2

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.

Solution 3

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

NUnit + ReSharper is an absolute joy to work with.

Solution 4

xUnit.net looks like it provides a slightly different approach to NUnit, MbUnit, and MSTest, 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.

Solution 5

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.

Share:
10,639
Mitkins
Author by

Mitkins

I do .NET, C++, Ruby, Automated Testing, Running and Snowboarding@borland

Updated on June 28, 2022

Comments

  • Mitkins
    Mitkins almost 2 years

    I am getting back into a bit more .NET after a few-years of not using it full-time and am 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 I 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 :-)

    Suggestions?

  • Sam
    Sam over 15 years
    +1, note NUnit 2.5 has the nice RowTest features, plus Combinatorial testing of arguments, etc.
  • Kjetil Klaussen
    Kjetil Klaussen over 15 years
    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
    Kjetil Klaussen over 15 years
    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).
  • Iain Holder
    Iain Holder over 15 years
    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.
  • Mitkins
    Mitkins about 15 years
    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 :-(
  • binarydreams
    binarydreams almost 15 years
    Aye, NUnit 2.5 has RowTest features via the [TestCase] attribute.
  • Amir
    Amir almost 12 years
    You may want to look at this NSpec (nspec.org). It's almost identical to RSpec.
  • Mitkins
    Mitkins over 5 years
    Note: Since around VS2017/dotnetcore, microsoft have rewritten all the MSTest stuff. There's now an MSTestV2 and the runner/model are very much the same as what you'd expect from NUnit and other such things, so I think MSTest is a much more viable option these days
  • Iain Holder
    Iain Holder over 5 years
    Interesting, I’ll check it out. My answer is over a decade old now so is probably less accurate than it once was. :-)
  • Peter Mortensen
    Peter Mortensen almost 4 years
    The RhinoMocks link is (effectively) broken. It redirects to a generic page.