= 0.9.10 ()
* Added Mocha::ObjectMethods#unstub method - https://github.com/floehopper/mocha/issues#issue/6
* Inherit Mocha::ExpectationError from Exception instead of StandardError to reduce the chances of a test passing by accident - thanks to James Sanders (jsanders) - https://github.com/floehopper/mocha/issues#issue/15
* Fixed bug - GitHub README page to link correctly to code examples - https://github.com/floehopper/mocha/issues/closed#issue/11
* Fixed bug - PASSTHROUGH_EXCEPTIONS are defined on MiniTest::Unit::TestCase not in Mocha - thanks to Brian Troutwine (blt) - https://github.com/floehopper/mocha/issues/closed#issue/14
= 0.9.9 (ee3a79db4d52c3339e8acf07505e01236a2b4810)
* Avoid loading bits of the test-unit gem by accident. This is an attempt at
a fix for the problem that James Adam reported [1]. By using 'load' instead
of 'require' to detect the version of Test::Unit, we can avoid rubygems
trying to load bits of the test-unit gem when it's not wanted. [1]
http://floehopper.lighthouseapp.com/projects/22289-mocha/tickets/50#ticket-50-13
* Fix exception when running rake without test-unit gem. When test-unit gem
>=v2.0.0 was installed but the "use_test_unit_gem" MOCHA_OPTIONS was not
specified, a "comparison of Fixnum with Hash failed" exception was being
raised when running the performance tests. This was because bits of the
test-unit gem were being loaded accidentally and a Hash was being
incorrectly supplied to the TestRunner.run method.
* Explicitly require rubygems for running tests via rake using test-unit gem.
* Handle newer versions of test-unit gem (v2.0.2 to v2.0.9)
* Handle newer versions of minitest gem (v1.4.0 to v1.6.0)
* Added warnings about monkey-patching test-unit and minitest to aid
debugging. These are enabled by including "debug" in the MOCHA_OPTIONS
environment variable. This is now a comma-separated list, so that we can
specify multiple options e.g. MOCHA_OPTIONS=debug,use_test_unit_gem
* Eloy Duran (alloy) made the unit tests run on 1.9.2dev r25249.
* Eloy Duran (alloy) also improved some MiniTest TestResult code I'd written
and got the acceptance tests running on Ruby 1.9 HEAD. There are still 4
failures because for some reason the backtrace line numbers are off by
one. And the minitest_test test case does not run when the whole suite is
run with MiniTest. These issues still need investigation.
* Fixed some acceptance tests to run in Ruby 1.9.2 - it's no longer possible
to subvert the protection of a method by calling it via Object#send.
* Fixed "test:performance" rake task so it runs in Ruby 1.9.2.
* Fix test incorrectly failing under Rubinius 1.0. This test imposed too many
constraints. It appears that Object#inspect legitimately calls
Object#object_id in Rubinius. But we're only interested in what 'id'
methods Mocha::ObjectMethods#mocha_inspect calls. By stubbing
Object#inspect we can relax the constraints imposed by the test.
* Luke Redpath (lukeredpath) added new shorthand "any" and "all" composite
parameter matchers using "&" and "|". This provides an alternative syntax
for expecting any or all matchers to pass,
e.g. foo.expects(:bar).with(equals(1) | equals(2)).
* Improved documentation for Expectation#raises. A number of people have
suggested an extension to the API to cope with custom exceptions that have
extra constructor parameters. However, since the arguments supplied to
Expectation#raises are just passed on to Kernel#raise, it's possible to
pass in an instance of an exception. Thus no change to the API is required,
but it does seem worthwhile pointing this out in the docs.
* Corrected RDoc example for Expectation#never thanks to Red David (reddavis).
* Improved RDoc including a change suggested by Rohit Arondekar (rohit).
* Updated gemspec as requested by Sam Woodard (shwoodard).
= 0.9.8 (645024765b2d92018efc511652e1174163844e39)
* Fixed bug "NameError raised when using Mocha as a Rails plug-in" -
http://floehopper.lighthouseapp.com/projects/22289/tickets/53. Since 0.9.6 the
Rails plugin has been broken. See bug report for details. You will need to
explicitly load Mocha *after* the test framework has been loaded, e.g. by
adding "require 'mocha'" at the bottom of test/test_helper.rb.
* Make Mocha::ParameterMatchers#regexp_matches, #includes, #has_value, #has_key
more robust. Thanks to Sander Hartlage.
* Allow passing a block to Mocha::Configuration methods to only change
configuration for the duration of the block. Thanks to Dan Manges.
* Fixed bug "doc generation fails in 0.9.7 gem" -
http://floehopper.lighthouseapp.com/projects/22289/tickets/51.
* Remove rdoc template incorporating google analytics from source control. The
file just needs to exist locally and be ignored by source control. This should
stop the warning showing up on e.g. RunCodeRun build results.
= 0.9.7 (80d816f250dc13aaf856f3f9cbd97ebe9c371839)
* Although I had provided a deprecation warning for people using
Mocha::Standalone, I had assumed people wouldn't be explicitly loading the
mocha/standalone.rb file. It turns out this assumption was incorrect at least
in the case of Rspec. This is now fixed.
= 0.9.6 (57f8f77d715b7f1d9efee2e1a9438f7905c0006b)
* Version 2.0.1 of the test-unit gem introduced a private 'run_test' method on
TestCase which clashed with the public TestRunner#run_test method. So this
latter method has been renamed to 'run_as_test'.
* Stop requiring rubygems - this should be an environmental choice for the user.
http://gist.github.com/54177 - describes why requiring rubygems in your
library code is a bad idea.
* It seems like overkill to vendorize coderay and meta_project when they're only needed to generate the examples for documentation and for publishing files on RubyForge. So I'm removing them and installing them locally as gems when I need them.
* Added support for 'test-unit' gem (version >= 2.0). Note that as with other
versions of Test::Unit I'm completely replacing the TestCase#run method.
Unfortunately in version 2.0.0 this method differs slightly from the same
method in version 2.0.1 & 2.0.2, so we have to provide different
implementations to ensure that the internal working of Test::Unit are not
compromised by Mocha. Note also that unless the 'test-unit' gem is loaded,
requiring 'test/unit' leads to a mixture of stdlib and gem classes being
loaded causing errors. To avoid a dependency on rubygems, the gem is loaded
only if MOCHA_OPTIONS is set to 'use_test_unit_gem' - this option is only
intended for use in running Mocha's own tests. It might be worthwhile to
create a shim gem like minitest_tu_shim to allow the test-unit gem to
completely replace the stdlib, but that's a job for another day. The changes
in the Rakefile are to make the default task run with the 'test-unit' gem
(version >= 2.0).
* Renamed Mocha::Standalone to Mocha::API to better reflect its purpose. Added a
deprecation warning for those who are referencing Mocha::Standalone.
* Fix exception raised by HasEntry#matches? if first param is not a Hash (thanks
to Taylor Barstow).
* Ken Collins reported [1] that Mocha is always loading MiniTest if it is
available and loading it causes some Rails/ActionPack tests to break. I've
removed the loading of MiniTest, but this now means the user has to ensure
that if they want to use MiniTest in conjunction with Mocha, he must load
MiniTest before loading Mocha.
[1] http://rails.lighthouseapp.com/projects/8994-ruby-on-rails/tickets/2060
* Implemented Bacon integration (thanks to Ubiratan Pires Alberton), but this
was then removed after deciding only to maintain integration with Test::Unit
and MiniTest which are both Ruby standard libraries. See mailing list for
details.
* Don't monkey-patch MiniTest if it's already been monkey-patched by Mocha.
* Fixed bug: MiniTest integration was counting ExpectationErrors as errors not
failures. http://floehopper.lighthouseapp.com/projects/22289-mocha/tickets/41.
* Fixed bug: Some Bacon tests were failing in Ruby 1.9.1.
http://floehopper.lighthouseapp.com/projects/22289-mocha/tickets/43.
* Chad Humphries pointed out that in Ruby 1.9.1, if you are not using Test::Unit
or MiniTest, Mocha will attempt to load and monkey-patch Test::Unit. Mocha
will now only monkey-patch Test::Unit and/or MiniTest if they have already
been loaded. MiniTest tests will now run in both Ruby 1.8.6 (with MiniTest
gem) and in Ruby 1.9.1 (with MiniTest std lib). See Ligthouse ticket -
http://floehopper.lighthouseapp.com/projects/22289/tickets/49.
* Made Mocha compatible with minitest 1.4.0 and above (thanks to Denis Defreyne).
= 0.9.5 (93cad010345ce5d68f31422cfc32ed9dd6de13ec)
* Fixed Lighthouse bug #32 - stub_everything should mean mock responds to
anything.
* Added Expectation#twice to improve readability. Thanks to pull request from
Celestino Gomes.
* In Ruby 1.9.1, requiring 'test/unit' loads a thin wrapper around MiniTest and
Test::Unit::TestCase ends up inheriting from MiniTest::Unit::TestCase. So we
need to avoid including the Mocha modules more than once to avoid nasty
consequences. Thanks to Matthias Hennemeyer for help with this.
* Ruby 1.9 includes rake, but not rake/contrib. For the moment I've moved the
sshpublisher require into the only rake task that needs it, so that I can at
least run the tests in Ruby 1.9. It looks like I will need to build a
rake/contrib gem or similar to get this working properly -
http://intertwingly.net/blog/2008/01/07/Rake-Contrib-for-1-9
= 0.9.4 (8a59c6ff0f99f34b02bd99f19536a7893be2b340)
* Added mocha.gemspec file generated with Chad Woolley's new rake task, so that
a floehopper-mocha gem will get built on GitHub.
* Add rake task to update mocha.gemspec with unique version, which will cause
gem to be auto-built on github
* As Tobias Crawley correctly pointed out in feature request #23055
"stubs(with_hash) not working with existing object" [1], following the
principle of least surprise, it should be possible to call
ObjectMethods#expects & ObjectMethods#stubs with a Hash of method_names vs
return_values like you can with Mock#expects & Mock#stubs. I've also updated &
improved the docs to reflect the changes.
[1] http://rubyforge.org/tracker/index.php?func=detail&aid=23055&group_id=1917&atid=7480
* Removed deprecated gem autorequire.
= 0.9.3 (8219bb2d2881c8529c93fc21e97a11d01203c759)
* Added support for MiniTest thanks to Jeff Smick.
* Fixed a possible bug with some of the non-default Configuration options
relating to the argument to Object#respond_to?
* As per Jay Fields recommendations [1] and with further impetus from a talk at
Ruby Manor, any methods added to core classes are now added by including a
module. This means that Mocha is a better citizen of the Ruby world and it's
behaviour is more easily extended.
[1] http://blog.jayfields.com/2008/07/ruby-underuse-of-modules.html &
http://blog.jayfields.com/2008/07/ruby-redefine-method-behavior.html
* Removed deprecated gem autorequire.
= 0.9.2 (r355)
* Improved documentation to address [#22530] 'Mock methods with multiple return
values not possible?'
* respond_with parameter matcher was not available in tests.
* Patch [#22630] Fix for a bug in running Rails tests with Ruby 1.8.7.
Array#flatten was being called which in turn was checking whether each element
responded to #to_ary. This check was using the two parameter version of
#respond_to?, but Mock was only defining a one parameter version.
= 0.9.1 (r349)
* Fixed bug #21465 - expects & stubs should support method names as strings (as well as symbols) or fail fast. Convert all expectation method names to a symbol in case they were supplied as a string.
* By removing Mock#unexpected_method_called we reduce the number of methods vulnerable to the problem that surfaced in bug #21563.
* Fix bug #21563 - stubbing 'verified?' method is unsafe. Instance method names on the Mock class should be more obscure.
* Performance improvement. StubbaExampleTest goes twice as fast on my local machine.
* Added primitive performance test to default rake task.
* Fix format of case statements which don't work in Ruby 1.9 and make others consistent.
* There is no point in running (potentially expensive) checks if configuration is set to allow such checks to fail. This is a relatively quick fix in response to Chris McGrath's performance problems.
* Fix for bug #21161 - 'uninitialized constant Deprecation in stubba.rb'.
* It's more readable to talk about 'once' and 'twice' rather than '1 time' and '2 times'.
* Fix bug #20883 - never should raise when called to prevent follow up errors. Fail fast when there are no matching invokable expectations and handle the stub_everything case sensibly. This might not be entirely backwards compatible, but I think the benefits outweigh the risks. The most likely change is that a test that was already failing will now fail faster, which doesn't seem so awful.
= 0.9.0 (r316)
* Configurable warnings or errors
* when a method on a non-public method is stubbed
* when a method on a non-existent method is stubbed
* when a method on a non-mock object is stubbed
* when a method is stubbed unnecessarily (i.e. the stubbed method is not called during the test)
* Improved error messages
* User-friendly list of unsatisfied expectations, satisfied expectations and state machines.
* Improved readability of cardinality description.
* Display sensible failure message for any_instance expectations e.g. "#<AnyInstance:Foo>.bar - expected calls: 1, actual calls: 0"
* Parameter matchers
* New to this release
* optionally (allows matching of optional parameters if available)
* yaml_equivalent (allows matching of YAML that represents the specified object)
* responds_with (tests the quack not the duck)
* Nesting of parameter matchers is now supported.
* Optional block passed into mock initializer is evaluated in the context of the new mock instance and can be used as a shortcut to set up expectations.
* Added JMock-style sequences for constraining the order of expected invocations. See Standalone#sequence and Expectation#in_sequence.
* Added JMock-style states for constraining the order of expected invocations. See Standalone#states, Expectation#then, Expectation#when and StateMachine.
* Compatibility with versions of Ruby
* Compatibility with Ruby v1.9. All test errors and warnings fixed.
* Nasty fix so that TestCaseAdaptor works consistently with earlier versions of Test::Unit as well as more recent versions.
* Added platform to gem specification to avoid bug in rubygems 0.9.5 - see http://www.dcmanges.com/blog/rubygems-0-9-5-platform-bug and http://rubygems.org/read/chapter/20#platform.
* Make ExpectationRaiser deal with subclasses of Interrupt which seem to need a message supplied in the raise statement in Ruby 1.8.6 (but not 1.8.4 or 1.9). Not sure this is really Mocha's responsibility.
* Added deprecation warning in stubba.rb which is no longer needed and will be removed.
* Supply positioning information to evals to improve any error messages. See http://ola-bini.blogspot.com/2008/01/ruby-antipattern-using-eval-without.html
* Bug fixes
* 18914 in revision 296 - http://rubyforge.org/tracker/index.php?func=detail&aid=18914&group_id=1917&atid=7477
* 18917 in revision 295 - http://rubyforge.org/tracker/index.php?func=detail&aid=18917&group_id=1917&atid=7477
* 18336 in revision 287 - http://rubyforge.org/tracker/index.php?func=detail&aid=18336&group_id=1917&atid=7477
* 17835 in revision 255 - http://rubyforge.org/tracker/index.php?func=detail&aid=17835&group_id=1917&atid=7477
* 17412 in revision 242 - http://rubyforge.org/tracker/index.php?func=detail&aid=17412&group_id=1917&atid=7477
* 15977 in revision 198 - http://rubyforge.org/tracker/index.php?func=detail&aid=15977&group_id=1917&atid=7477
* 11885 in revision 156 - http://rubyforge.org/tracker/index.php?func=detail&aid=11885&group_id=1917&atid=7477
Packages Collection.
Mocha is a Ruby library for mocking and stubbing using a syntax
like that of JMock, and SchMock. Most commonly Mocha is used in
conjunction with Test::Unit, but it can be used in other contexts.
One of its main advantages is that it allows you to mock and stub
methods on real (non-mock) classes and instances. You can for
example stub ActiveRecord instance methods like create, save,
destroy and even class methods like find to avoid hitting the
database in unit tests.
Mocha provides a unified, simple and readable syntax for both
traditional mocking and for mocking with real objects.