Rhino Mocks with Managed C++
Having just had the unfortunate need to use rhino mocks from managed C++ I thought I would document the “how”
Let’s say you want to mock/stub IFoo. Which has two methods:
IQux Bar()
int Baz(int)
Create a MockRepository:
IFoo^ foo_stub = MockRepository::GenerateStub<IFoo^>();
Stub out Bar() -> Note it doesn’t take a parameter:
Rhino::Mocks::Function<IFoo^, IQux^>^ foo_bar =
gcnew Rhino::Mocks::Function<IFoo^, IQux^>(&IFoo::Bar);
RhinoMocksExtensions::Stub(foo_stub, foo_bar)->Return(
/* Another mock/stub or a real IQux */
);
Stub out Baz() -> Note it takes a parameter:
Note, the static method, this will configure the stub for a specific argument, in this example when Baz(1) is called we return 2.
Rhino::Mocks::Function<IFoo^, int>^ foo_baz =
gcnew Rhino::Mocks::Function<IFoo^, int>(&Test::FooStubBaz);
RhinoMocksExtensions::Stub(foo_stub, foo_baz)->Return(2);
// IFoo will actually be a rhino mock/stub
int Test::FooStubBaz(IFoo^ foo) {
return foo->Baz(1);
}
Now foo_stub->Baz(1) will return 2
I imagine you could remove the need for a static method but this was enough for my needs and my head!