-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmethod_not_called.rb
More file actions
87 lines (68 loc) · 1.42 KB
/
method_not_called.rb
File metadata and controls
87 lines (68 loc) · 1.42 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
require "minitest/autorun"
class Report
def html; end
end
class YamlFileReport
def html
read_large_file
create_html_and_return_it
end
end
class CachedReport
def initialize(origin)
@origin = origin
@cache = []
end
def html
@cache << @origin.html if @cache.empty?
@cache.first
end
end
class CachedReportTest < Minitest::Test
def test_caches_call_to_origin_using_instance_variable_get
cached = CachedReport.new(fake_origin)
2.times { cached.html }
# Deliberately breaking encapsulation.
assert_equal 1, cached.instance_variable_get(:@cache).size
end
private
def fake_origin
origin = Object.new
def origin.html = "any"
origin
end
end
class CachedReportTest < Minitest::Test
def test_caches_call_to_origin_using_spy
counter = CacheHitCounter.new
cached = CachedReport.new(counter)
2.times { cached.html }
assert_equal 1, counter.count
end
end
class CacheHitCounter
attr_reader :count
def initialize
@count = 0
end
def html
@count = @count.next
end
end
module ReportInterfaceTest
def test_implements_fixture_set_interface
assert_respond_to @object, :html
end
end
class YamlFileReportTest < Minitest::Test
include ReportInterfaceTest
def setup
@object = YamlFileReport.new
end
end
class CacheHitCounterTest < Minitest::Test
include ReportInterfaceTest
def setup
@object = CacheHitCounter.new
end
end