Other Mock/Stub Frameworks

If you prefer to use a mocking framework other than RSpec’s built in framework, you
can do this quite simply. RSpec currently supports use of the following frameworks
out of the box (in alphabetical order):

RSpec supports use of a single framework per project, because these frameworks (including)
RSpec’s own, tend to add methods to Object that might or might not work well together. To
choose a mock framework other than rspec, simply add the following to spec/spec_helper.rb
(or any file that gets loaded when you run your examples):

Spec::Runner.configure do |config|
  config.mock_with :rr
end

Valid options are :flexmock, :mocha, :rspec (of course),
and :rr.

Even more “other” frameworks

If you have a different framework that is not supported directly by RSpec, you can easily
choose that framework instead by creating an adapter and telling RSpec where to find it.
Here is RSpec’s own adapter as an example:

require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "lib", "spec", "mocks"))
require 'spec/mocks/framework'
require 'spec/mocks/extensions'

module Spec
  module Plugins
    module MockFramework
      include Spec::Mocks::ExampleMethods
      def setup_mocks_for_rspec
        $rspec_mocks ||= Spec::Mocks::Space.new
      end
      def verify_mocks_for_rspec
        $rspec_mocks.verify_all
      end
      def teardown_mocks_for_rspec
        $rspec_mocks.reset_all
      end
    end
  end
end

This file must require any libraries or resources that implement the framework, and then define
a Spec::Plugins::MockFramework module with the following methods:

Once you have defined your adapter, you can then tell RSpec to use your adapter like so:

Spec::Runner.configure do |config|
  config.mock_with '/path/to/my/adapater.rb'
end