File: nutshell.rst

package info (click to toggle)
python-mockito 1.4.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 528 kB
  • sloc: python: 4,102; makefile: 206
file content (138 lines) | stat: -rw-r--r-- 3,259 bytes parent folder | download
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
TL;DR
-----


::

    >>> from mockito import *
    >>> myMock = mock()
    >>> when(myMock).getStuff().thenReturn('stuff')
    <mockito.invocation.AnswerSelector object at 0x00CA0BB0>
    >>> myMock.getStuff()
    'stuff'
    >>> verify(myMock).getStuff()

    >>> when(myMock).doSomething().thenRaise(Exception('Did a bad thing'))
    <mockito.invocation.AnswerSelector object at 0x00CA0C10>
    >>> myMock.doSomething()
    Traceback (most recent call last):
    <...>
    Exception: Did a bad thing

No difference whatsoever when you mock modules

::

    >>> import os.path
    >>> when(os.path).exists('somewhere/somewhat').thenReturn(True)
    <mockito.invocation.AnswerSelector object at 0x00D394F0>
    >>> when(os.path).exists('somewhere/something').thenReturn(False)
    <mockito.invocation.AnswerSelector object at 0x00C7D1B0>
    >>> os.path.exists('somewhere/somewhat')
    True
    >>> os.path.exists('somewhere/something')
    False
    >>> os.path.exists('another_place')
    Traceback (most recent call last):
    <...>
    mockito.invocation.InvocationError: You called exists with ('another_place',) as
     arguments but we did not expect that.

    >>> when(os.path).exist('./somewhat').thenReturn(True)
    Traceback (most recent call last):
    <...>
    mockito.invocation.InvocationError: You tried to stub a method 'exist'
    the object (<module 'ntpath' from ...>) doesn't have.

If that's too strict, you can change it

::

    >>> when(os.path, strict=False).exist('another_place').thenReturn('well, nice here')
    <mockito.invocation.AnswerSelector object at 0x00D429B0>
    >>> os.path.exist('another_place')
    'well, nice here'
    >>> os.path.exist('and here?')
    >>>

No surprise, you can do the same with your classes

::

    >>> class Dog(object):
    ...   def bark(self):
    ...     return "Wau"
    ...
    >>> when(Dog).bark().thenReturn('Miau!')
    <mockito.invocation.AnswerSelector object at 0x00D42390>
    >>> rex = Dog()
    >>> rex.bark()
    'Miau!'

or just with instances, first unstub

::

    >>> unstub()
    >>> rex.bark()
    'Wau'

then do

::

    >>> when(rex).bark().thenReturn('Grrrrr').thenReturn('Wuff')
    <mockito.invocation.AnswerSelector object at 0x00D48790>

and get something different on consecutive calls

::

    >>> rex.bark()
    'Grrrrr'
    >>> rex.bark()
    'Wuff'
    >>> rex.bark()
    'Wuff'

and since you stubbed an instance, a different instance will not be stubbed

::

    >>> bello = Dog()
    >>> bello.bark()
    'Wau'

You have 4 modifiers when verifying

::

    >>> verify(rex, times=3).bark()
    >>> verify(rex, atleast=1).bark()
    >>> verify(rex, atmost=3).bark()
    >>> verify(rex, between=[1,3]).bark()
    >>>

Finally, we have two matchers

::

    >>> myMock = mock()
    >>> when(myMock).do(any(int)).thenReturn('A number')
    <mockito.invocation.AnswerSelector object at 0x00D394B0>
    >>> when(myMock).do(any(str)).thenReturn('A string')
    <mockito.invocation.AnswerSelector object at 0x00D39E70>
    >>> myMock.do(2)
    'A number'
    >>> myMock.do('times')
    'A string'

    >>> verify(myMock).do(any(int))
    >>> verify(myMock).do(any(str))
    >>> verify(myMock).do(contains('time'))

   >>> exit()

.. toctree::
   :maxdepth: 2