Skip to content

Instantly share code, notes, and snippets.

@floehopper
Created January 11, 2014 17:45
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save floehopper/8374169 to your computer and use it in GitHub Desktop.
Save floehopper/8374169 to your computer and use it in GitHub Desktop.
Testing recursion using mocking/stubbing.
class Factorial
def execute(n, method = method(:execute))
n.zero? ? 1 : n * method.call(n - 1, method)
end
end
require 'bundler/setup'
require 'minitest/unit'
require 'mocha/mini_test'
require 'minitest/autorun'
class FactorialTest < MiniTest::Unit::TestCase
def setup
@factorial = Factorial.new
@factorial.stubs(:recurse)
@recursive_method = @factorial.method(:recurse)
end
def test_execute_returns_one_when_number_reaches_zero
assert_equal 1, @factorial.execute(0)
end
def test_execute_does_not_recurse_when_number_reaches_zero
@factorial.expects(:recurse).never
@factorial.execute(0, @factorial.method(:recurse))
end
def test_execute_does_recurse_when_number_is_greater_than_zero
@factorial.expects(:recurse).with(0, anything).returns(1)
@factorial.execute(1, @recursive_method)
end
def test_execute_passes_recursive_method_when_number_is_greater_than_zero
@factorial.expects(:recurse).with(anything, @recursive_method).returns(1)
@factorial.execute(1, @recursive_method)
end
def test_execute_returns_result_of_recursive_method_when_number_is_greater_than_zero
@factorial.expects(:recurse).returns(1)
assert_equal 1, @factorial.execute(1, @recursive_method)
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment