Just wanted to drop a quick note that a new version of FlexMock is now
available.
There are two nice enhancements and a minor bug fix in this version.
The first enhancement is for mocking ActiveRecord objects. The folks
at EdgeCase use a mockmodel() method for the RSpec mock that returns a
mock that has some common ActiveRecord methods mocked (stubbed) with
some reasonable values. This make is a bit more convenient when
mocking Rails models. FlexMock now supports this natively, just say
flexmock(:model, YourRailsModel) to create a mock object
that mimics a YourRailsModel object.
The second enhancement is in regard to the What Should
flexmock(real_obj)
Return?
question I blogged about last May. I asked the question: What should
flexmock(real_obj) return, the real object or the mock object?
Someone had suggested returning the real object when flexmock() is
given a block. There was some positive response to that, so that was
included in the FlexMock release.
But after several months of using it, I found it difficult to remember
which version of flexmock() returned what. At one point I found
myself caling flexmock() with an empty block, just to get the real
object back. That was madness.
So starting with release 0.6.4, flexmock will always return the real
object. This is the best of both worlds, but it comes with a small
price. Real objects partially mocked by FlexMode will now be enhanced
with some extra methods, just enough methods so that addition mock
behavior can be added to it. For example, should_receive
is added to the partially mocked real object. This pollutes the
method namespace for an object, but the result is much simplier for
the programmer to use. If you really want to avoid method namespace
pollution, there is a :safe mode offered. Read the docs for all the
gory details.
By The Way, If You Grabbed Version 0.6.3 …
If you are one of the handful of people that downloaded verion 0.6.3
yesterday, then go ahead and grab 0.6.4. The only difference is in
the API for mocking ActiveRecord models. After using it for a bit, I
realized that the API could be improved, hence version 0.6.4. Sorry
about that.