module Spy::Mock

def included(mod)

def included(mod)
  method_classes = classes_to_override_methods(mod)
  mocked_methods = []
  [:public, :protected, :private].each do |visibility|
    get_inherited_methods(method_classes, visibility).each do |method_name|
      mocked_methods << method_name
      args = args_for_method(mod.instance_method(method_name))
      mod.class_eval <<-DEF_METHOD, __FILE__, __LINE__ + 1
        def #{method_name}(#{args})
          raise ::Spy::NeverHookedError, "'#{method_name}' was never hooked on mock spy."
        end
      DEF_METHOD
      mod.send(visibility, method_name)
    end
  end
  mod.define_singleton_method(:mocked_methods) do
    mocked_methods
  end
end