← All articles

TIP: Utilizing Fluent Syntax with the "Is" Keyword in Rhino Mocks and NUnit

Rhino Mocks and NUnit both use an Is keyword, which collides. Use NUnit's Iz syntax helper instead so both fluent APIs work together.

Donn Felker

Donn Felker

2008.05.23 · 1 min read

Rhino Mocks and NUnit both have a “Is” keyword, both used for a fluent style of syntax. Unfortunately this causes testing problems when you need to use them together. The .NET compiler can only understand one “Is” keyword at a time. We can’t use both unless we full qualify the second one.

Having said that, I’ve fully qualified the “Is” keyword for Rhino Mocks and NUnit before and I find it clunky and I feel its a code smell to me.

In the figure below an example of a fully qualified “Is” keyword for Rhino Mocks is declared.
1 [Test]
2 public void ExampleTest()
3 {
4 // ... items ommited for brevity
5
6 With.Mocks(mockery)
7 .Expecting(delegate
8 {
9 Expect.Call(databaseMock.GetStoredProcCommand(null))
10 .IgnoreArguments()
11 .Constraints(Rhino.Mocks.Constraints.Is.NotNull())
12 .Return(databaseCommandStub);
13 })
14 .Verify(delegate
15 {
16 IQuery query = ExampleResultQuery.GetInsertResultQueryFrom(someparameter);
17 IDatabaseCommand command = query.PrepareCommandUsing(databaseMock);
18 Assert.That(command, Is.SameAs(databaseCommandStub));
19 });
20 }

On line 11, we can see the fully qualified name: Rhino.Mocks.Constraints.Is.NotNull() method called.

This, my friends, is a code smell (IMO).

How To Fix

The NUnit testing framework provides a “Iz” syntax helper that VB.NET developers use because “Is” in VB.NET is a keyword.

Since we’re using .NET Managed code we can use the Iz keyword and it will achieve the same results as Is did. Therefore we can use the Is keyword in Rhino Mocks and we can use the Iz keyword in NUnit. This saves a lot of key strokes over the course of a day.

Final Example:

1
2 [Test]
3 public void ExampleTest()
4 {
5 // ... items ommited for brevity
6
7 With.Mocks(mockery)
8 .Expecting(delegate
9 {
10 Expect.Call(databaseMock.GetStoredProcCommand(null))
11 .IgnoreArguments()
12 .Constraints(Is.NotNull())
13 .Return(databaseCommandStub);
14 })
15 .Verify(delegate
16 {
17 IQuery query = ExampleResultQuery.GetInsertResultQueryFrom(someparameter);
18 IDatabaseCommand command = query.PrepareCommandUsing(databaseMock);
19 Assert.That(command, Iz.SameAs(databaseCommandStub));
20 });
21 }

Please note: Line 12 has the normal “Is.NotNull()” call from Rhino Mocks, and Line 19 utilizes the Iz syntax helper from NUnit.

I find this much easier on the wrist. 🙂

Donn Felker

Written by Donn Felker

I've spent 25+ years shipping software, writing books, and running my own companies. I write about thinking clearly, working for yourself, and doing real work while AI rewrites the rules. New essays land here every week.

Get the newsletter

Keep reading