Created
January 11, 2014 17:45
-
-
Save floehopper/8374169 to your computer and use it in GitHub Desktop.
Testing recursion using mocking/stubbing.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class Factorial | |
def execute(n, method = method(:execute)) | |
n.zero? ? 1 : n * method.call(n - 1, method) | |
end | |
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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