/
mockstar_test.py
185 lines (126 loc) · 4.73 KB
/
mockstar_test.py
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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
# -*- coding: utf-8 -*-
import unittest
from unittest import TestCase
from mock import MagicMock
from mock import patch
from mockstar import p
from mockstar import DotDict
from mockstar import prefixed_p
from mockstar import M
from mockstar import sequence_side_effect
from mockstar import BaseTestCase
def side_effect_one():
pass
def side_effect_two():
pass
def side_effect_three():
val = side_effect_four()
return val * 2
def side_effect_four():
return 4
def side_effect_five(n):
return n
class TestDotDict(TestCase):
def test_should_setattr_getattr(self):
d = DotDict()
d['foo'] = 'something'
# do
result = d.foo
self.assertEquals(result, 'something')
class TestPatch(TestCase):
@p(__name__ + '.side_effect_one')
@p(__name__ + '.side_effect_two')
def test_should_mock_to_kw(self, se):
self.assertIsInstance(se.side_effect_one, MagicMock)
self.assertIsInstance(se.side_effect_two, MagicMock)
@p(__name__ + '.side_effect_four')
def test_should_mock_inner_call(self, se):
se.side_effect_four.return_value = 1
# do
result = side_effect_three()
self.assertEquals(result, 2)
@p(__name__ + '.side_effect_five', autospec=True)
@patch('mockstar.patch')
def test_should_pass_mock_parameters(self, mockstar_patch_mock, se):
se.side_effect_five(10)
self.assertRaises(TypeError, lambda: se.side_effect_five())
class TestMultiPatch(TestCase):
@p(__name__ + '.side_effect_one', __name__ + '.side_effect_two')
def test_should_mock_to_kw(self, se):
self.assertIsInstance(se.side_effect_one, MagicMock)
self.assertIsInstance(se.side_effect_two, MagicMock)
class TestM(TestCase):
def test_should_create_object(self):
m = M()
m.asd = 'dsa'
self.assertEquals(m.asd, 'dsa')
def test_should_make_couple_rv(self):
m = M()
m.foo.rv.bar.rv.baz.rv = 28
self.assertEquals(m.foo().bar().baz(), 28)
ppatch = prefixed_p(__name__)
# ppatch_autospec_M = prefixed_p(__name__, autospec=True, to_m=True)
ppatch_autospec = prefixed_p(__name__, autospec=False)
class TestPrefixedP(TestCase):
@ppatch('side_effect_five', autospec=True)
def test_should_prefix_patch_here(self, se):
self.assertRaises(TypeError, lambda: se.side_effect_five())
@ppatch_autospec('side_effect_five', autospec=True)
def test_should_rewrite_ppatch_param(self, se):
self.assertRaises(TypeError, lambda: se.side_effect_five())
# @ppatch_autospec_M('side_effect_five')
# def test_should_return_m_and_raise_typeerror(self, se):
# self.assertRaises(TypeError, lambda: se.side_effect_five())
# se.side_effect_five.rv = 20
# res = se.side_effect_five(10)
# self.assertEquals(res, 20)
# # self.assertIsInstance(m, M)
@ppatch('side_effect_one')
@ppatch('side_effect_two')
class TestPatchClass(TestCase):
def test_should_get_se(self, se):
self.assertIsInstance(se.side_effect_one, MagicMock)
self.assertIsInstance(se.side_effect_two, MagicMock)
def test_should_also_get_se(self, se):
self.assertIsInstance(se.side_effect_one, MagicMock)
self.assertIsInstance(se.side_effect_two, MagicMock)
@ppatch('side_effect_one', 'side_effect_two')
class TestMultiPatchClass(TestCase):
def test_should_get_se(self, se):
self.assertIsInstance(se.side_effect_one, MagicMock)
self.assertIsInstance(se.side_effect_two, MagicMock)
def test_should_also_get_se(self, se):
self.assertIsInstance(se.side_effect_one, MagicMock)
self.assertIsInstance(se.side_effect_two, MagicMock)
class TestSequenceSideEffect(TestCase):
def test_should_get_sequence(self):
m = M(side_effect=sequence_side_effect(1, 2, 3))
self.assertEquals(m(), 1)
self.assertEquals(m(), 2)
self.assertEquals(m(), 3)
def foo():
return 2 + 3
count_score_rv = M()
def count_score():
return count_score_rv
def count_score_caller():
return count_score()
class TestSideEffectsMethod(BaseTestCase):
@ppatch('count_score')
@ppatch('foo')
def side_effects(self, se):
se.something = se.foo.return_value
se.four = 4
return self.invoke(se)
def test_should_get_foo_mocked(self, se):
self.assertIsInstance(se.foo(), MagicMock)
def test_should_also_get_foo_mocksed(self, se):
self.assertIsInstance(se.foo(), MagicMock)
def test_should_see_something(self, se):
self.assertIs(se.something, se.foo())
def test_should_change_count_score(self, se):
se.count_score.return_value = m = M()
rv = count_score_caller()
self.assertIs(rv, m)
if __name__ == '__main__':
unittest.main()