Software Design Blog

Journey of Rinat Abdullin

Mighty Moose - Smart Continuous Unit Tests for .NET and Mono

Mighty Moose is a tool to help TDD practitioners to significantly reduce development friction and boost up their productivity. This commercial product is built on top of Autotest.NET, which is a cool, free and Open Source project of it’s own.

AutoTest.NET

Autotest.NET is a project inspired by the Ruby. It provides continuous testing for the .Net platform. Whenever a change is detected - we rebuild our solution and rerun tests.

Supported platforms:

  • Microsoft .NET
  • Mono Framework

Supported test runners:

  • NUnit;
  • MBUnit;
  • XUnit.

There is Visual Studio Integration, support for Growl and notify-send.

Autotest.NET really reduces development friction and shortens the feedback loop. One of the cool uses for this is to develop in Visual Studio while having the same tests automatically run under the Mono/Linux and .NET/Windows.

Ruby, Mono, Open Source - there is quite a pattern in the news today, isn’t it? Moncai announcement (Cloud Computing for .NET) had the same words in it as well. This is another indication of the trends that are building up in the community.

Mighty Moose

Mighty Moose is a commercial product on top of Autotest.NET (it’s being announced by Greg Young at Oredev, as we speak). It takes everything slightly further by actually analyzing your project and running only the tests that are affected by the changes in the code. So instead of 200 seconds for the entire build you would have only, say, 5 seconds needed to close the loop.

Obviously, there is a lot of really smart stuff going under the hood of “running tests that are affected by the changes in the code”. Think about generics, interfaces, value dependencies, dynamic invocations etc. It’s all being taken care of. Personally I couldn’t come up with any single real-world scenario that is not handled by the heuristics behind Mighty Moose - it’s that thorough and smart (and cool).

Mighty Moose pushes productivity and possibilities of TDD even further. Financial benefits could be measured in time - just multiple reduction of time by the number of times developer runs the entire unit test suite.

Basically, testing is done on the background and does not get in the way of the actual development. When you hit Ctrl-S - project is compiled (compiler errors are detected and reported to Visual Studio automatically via a tight integration), assemblies are analyzed and tests affected by the changes - fired.

Besides, Greg (yeah, that’s this smart guy behind CQRS, DDD with Event Sourcing stuff and CqrsInfo site) mentioned the possibility of making the product even more smart by adding logic to help improve the code by promoting good development practices. If this works out this will be something like consulting embedded in the product (potentially similar to the alerts Ayende has been embedding into his NHibernate Profiler)

Obviously the tool is not going fit every team. It mostly benefits TDD-oriented teams with highly productive developers (cases were buying tool saves time that’s worth the cost). Everybody else - can still use Autotest.NET.

Interested? You can follow Greg’s Twitter to stay tuned (and just say hi). I will also mention any updates on this blog as well.

On the overall, it’s a really interesting trend with Ruby-inspired idea, Mono, .NET and Open Source, that we’ve got here (check my previous post on Moncai if you missed it). As you can see there are more and more projects coming up in this direction. That’s not the last cool thing cooking in the field. Stay tuned - I’ll try to cover them as they come up))