Rhino Mocks 2.8 Released – Multi Mocks
I said it before, but I just have to say it again. It is a big mistake to release software. Any time that I do it, I need to make a new release soon after. (And no, not a bug fix release {usually} ).
Yet I did make the mistake of releasing the most dangerous software of them all, Rhino Mocks. The moment I do something to this beast, a new feature request come up. The problem is that I’m a sucker for frequent releases, I just can’t help implement features and ship them.
This release brings one major feature to the table, Multi Mocks. What is a Multi Mock?
A Multi Mock is a mock object that implements several interfaces. For instance, you may want to test this code:
public void CleanCollection(CollectionBase collection) { collection.Clear(); IDisposable disposable = collection as IDisposable; if(disposable!=null) disposable.Dispose(); } |
As you can see, we accept a collection, and we make sure to dispose of it if it is disposable. CollectionBase does not implements IDisposable, so this would usually force us to create a dummy class to make the MockRepository think that we need all those interfaces.
Instead, we can now do this:
[Test] public void ClearCollectionAndDisposesIt() { MockRepository mocks = new MockRepository(); CollectionBase collection = (CollectionBase)mocks.CreateMultiMock( typeof (CollectionBase), typeof (IDisposable)); collection.Clear(); ((IDisposable)collection).Dispose();
mocks.ReplayAll(); CleanCollection(collection); mocks.VerifyAll(); } |
There is also a DynamicMultiMock, with the same behavior. The functionality exists with generic overloads for 2.0, of course. Oh, I also added AtLeastOnce to the default options for repeating. I was asked to do this a long time ago, and I just forgot.
You can read the feature request here. This is also very useful in Remoting scenarios.
By my calculations, it is less than 6 hours from the feature request to shipping a well tested version out the door. Take that, Test Driven Development naysayers! As usual, you can get both binaries and source here.
Thanks against for Royston Shufflebotham for presenting such a clear need.
Comments
Comment preview