I wonder if he has used Rhino Mocks, from the description of mock frameworks in the post, it looks like he didn't.
At any rate, the syntax that he has there if quite interesting:
var mock = new Mock<IFoo>();mock.Expect(x => x.DoInt(It.Is<int>(i => i % 2 == 0))).Returns(1);
The use of lambda as a way to specify expectations is cool, and as a way to specify constraints, flat out amazing.
You can do most of that with Rhino Mocks right now, I feel forced to point out.
IFoo foo = mocks.DynamicMock<IFoo>(); Expect.Call( () => foo.DoInt(0) ) .Callback( (int i) => i % 2 == 0 ) .Return(1);
We even have an Is.Matching constraint, that we can use instead:
Expect.Call( () => foo.DoInt(0) ) .Constraints( Is.Matching<int>( i => i % 2 == 0) ) .Return(1);
I guess we will just need to see what kind of cool stuff we still have in store for it.
Great job, Daniel.
I suggest that you would check this out. The Quick Start gives few more examples, and it is looking really nice.
By the way, for the horde of people who would like to "port" those examples to Rhino Mocks, we have a wiki... :-)