Announcing Gallio and MbUnit v3.2.3

We are pleased to announce that a new release of Gallio/MbUnit is now available. This release contains many new features and improvements for MbUnit. Please see below or read the release notes for more details.

· Downloads

Please visit the Gallio website Downloads page to get the binaries, or grab them directly from here:

· Overview

This release mainly focuses on new features for MbUnit.
NHamcrest is an idiomatic C# port of Hamcrest (java version) made by Graham Hay. It provides a nice fluent syntax for Assert.That. The library is now part of the Gallio bundle.
public void Assert_that()
Assert.That(1, Is.Anything());

Assert.That(1 + 1, Is.EqualTo(2));
Assert.That("string", Is.EqualTo("string"));
Assert.That(5.0, Is.EqualTo(5.0));

Assert.That(false, Is.False());
Assert.That(true, Is.True());

Assert.That(null, Is.Null());
Assert.That("", Is.NotNull());

Assert.That(5, Is.LessThan(6));
Assert.That(5, Is.GreaterThan(4));

const string aString = "aString";
Assert.That(aString, Is.SameAs(aString));
Assert.That("the cat sat on the mat", Starts.With("the cat"));
Assert.That("the cat sat on the mat", Contains.String("sat on"));
Assert.That("the cat sat on the mat", Ends.With("the mat"));

Assert.That(1, Is.InstanceOf<int>());

Assert.That(() => { throw new ArgumentException(); }, Throws.An<ArgumentException>());
2 new assertions to check whether a code element is decorated with a specific attribute. Those assertions are particularly powerful when used in combination with the Mirror API.
public class Product
public int Id { get; set; }

[Required, StringLength(10)]
public string Name { get; set; }

public string Description { get; set; }

[Required, Range(0, 1000)]
public decimal Price { get; set; }
public class ProductTest
public void Product_has_DisplayNameAttribute()

public void Description_has_RequiredAttribute()
var property = Mirror.ForType<Product>()["Description"];
Case insensitive string matching.
Assert.Contains, Assert.DoesNotContain, Assert.StartsWith, and Assert.EndsWith now support case insensitive string matching.
public void Assert_contains()
string actualValue = "Edgar Allan Poe (January 19, 1809 – October 7, 1849)";
string expectedSubstring = "ALLAN POE";
Assert.Contains(actualValue, expectedSubstring, StringComparison.OrdinalIgnoreCase);
Again a new assertion which finally brings some symmetry to Assert.Exists.
public void Assert_doesNotExist()
var data = new[] { "Athos", "Porthos", "Aramis" };
Assert.DoesNotExist(data, x => x.Contains("gnan"));
Multiple [Impersonate] instances
Running tests under another identity is a little-known feature of MbUnit. It is now possible to provide several user credentials at once.
[Impersonate(UserName = "Julius", Password = "Ven1V1d1V1c1")]
[Impersonate(UserName = "Brutus", Password = "F**kD4ddy")]
public void Test()
var identity = WindowsIdentity.GetCurrent();
TestLog.Write("User = {0}", identity.Name);
And many other things...
Such as improvements to contract verifiers, "Seed" property to the random data sources, easier ways to assert over inner exceptions, etc.

· Credits

This great release was made possible thanks to the hard work of our dedicated fellow contributors:
  • Graham Hay
  • Artur Zgodziński
  • Jonathan Linstead
  • Yann Trévin
And a special thank to Jeff Brown for his invaluable advices and his deep knowledge of the Gallio infrastructure.

Finally, we would like to express our gratitude to our passionate users who help us in building that great piece of software by submitting bug reports, patches, blog posts, and suggestions.

And more than ever, contributions are gratefully received.


Multi-page Reports in Gallio/MbUnit v3.3

While the announcement of a new intermediate release of Gallio/MbUnit is imminent (next week?), we are continuing to focus on the major improvements that will be available in the future versions.

In case you are running Gallio against very large test suites (> 10000 tests), you might be interested by the following new feature. You can experiment it already by installing the latest v3.3 daily build (it's pretty stable already, IMHO)

As you may know, we dropped the XSL-based engine used for the report generation, in favor of high performing VTL templates (based on Castle NVelocity). The generation of the Text/HTML reports (Text, Text-Condensed, Html, Html-Condensed, XHtml, and XHtml-Condensed) is about 3 times faster. But more important, the report writer now supports multi-paging. Say goodbye to the heavy 20Mb reports that take hours to open in the web browser! Gallio is now able to split large reports into several smaller browsable files.

You might configure some parameters from the Gallio Control Panel. It's machine-wide settings that will affect the reports generated by every tool and test runner.