MbUnit and null parameters

I’ve recently moved from NUnit to MbUnit. I like the extra features it offers, in particular, the RowTest feature. This allows a single test to take different parameters – the parameters of which are specified in the attributes. Here’s an example:

class Test
{
    internal Test( string s )
    {
        if( string.IsNullOrEmpty( s ) )
            throw new ArgumentNullException( ) ;
    }
}

[ RowTest ]
[ Row( @"Hello World!" )]
[ Row( @"Another string" )]
public void Test1( string val )
{
    Test t = new Test( val );
}

Here, Test1 is being given the parameters from the attributes on the test. Previously, say, in NUnit, I’d have written a couple of unit tests that create this Test object and give it different values. Normally, I’d also write a couple that would try and create one with a null string and an empty string and assert that it throws an ArgumentNullException.

Now, in MbUnit, I went to write the test like so:

[ RowTest ]
[ Row( null , ExpectedException = typeof( ArgumentNullException ) ) ]
[ Row( @"Hello World!" )]
public void Test1( string val )
{
    Test t = new Test( val );
}

Strangely, this caused an internal error in MbUnit. Reading around, It looks like MbUnit is taking the first parameter of Row and treating it as an array rather than a single parameter. The complete non-obvious way around this is to cast the null to a string:

[ RowTest ]
[ Row( (string)null , ExpectedException = typeof( ArgumentNullException ) ) ]
[ Row( @"Hello World!" )]
public void Test1( string val )
{
    Test t = new Test( val );
}

This now works. Which is nice!


← Back to all posts

Based on the theme by Bradley Taunt.
View the Github repo.