My team use Rhino Mocks at work, and as a Moq fan, one of my most missed features is the ability to access invocation arguments when returning a value. For example:
mock.Setup(x => x.Execute(It.IsAny<string>())) .Returns((string s) => s.ToLower());
Rhino lacks this feature out of the box. It is possible, but pretty ugly:
mock.Stub(x => x.Execute(Arg<string>.Is.Anything)) .WhenCalled(invocation => invocation.ReturnValue = ((string) invocation.Arguments).ToLower());
Today I wrote some quick extensions for Rhino to make it behave a bit more like Moq.
mock.Stub(x => x.Execute(Arg<string>.Is.Anything)) .Return<string, string>(s => s.ToLower());
Grab them here: RhinoExtensions.cs