1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/python/mock-1.0.0/html/compare.html Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,672 @@ 1.4 + 1.5 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 1.6 + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 1.7 + 1.8 + 1.9 +<html xmlns="http://www.w3.org/1999/xhtml"> 1.10 + <head> 1.11 + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 1.12 + 1.13 + <title>Mock Library Comparison — Mock 1.0.0 documentation</title> 1.14 + 1.15 + <link rel="stylesheet" href="_static/nature.css" type="text/css" /> 1.16 + <link rel="stylesheet" href="_static/pygments.css" type="text/css" /> 1.17 + 1.18 + <script type="text/javascript"> 1.19 + var DOCUMENTATION_OPTIONS = { 1.20 + URL_ROOT: '', 1.21 + VERSION: '1.0.0', 1.22 + COLLAPSE_INDEX: false, 1.23 + FILE_SUFFIX: '.html', 1.24 + HAS_SOURCE: true 1.25 + }; 1.26 + </script> 1.27 + <script type="text/javascript" src="_static/jquery.js"></script> 1.28 + <script type="text/javascript" src="_static/underscore.js"></script> 1.29 + <script type="text/javascript" src="_static/doctools.js"></script> 1.30 + <link rel="top" title="Mock 1.0.0 documentation" href="index.html" /> 1.31 + <link rel="next" title="CHANGELOG" href="changelog.html" /> 1.32 + <link rel="prev" title="Further Examples" href="examples.html" /> 1.33 + </head> 1.34 + <body> 1.35 + <div class="related"> 1.36 + <h3>Navigation</h3> 1.37 + <ul> 1.38 + <li class="right" style="margin-right: 10px"> 1.39 + <a href="genindex.html" title="General Index" 1.40 + accesskey="I">index</a></li> 1.41 + <li class="right" > 1.42 + <a href="changelog.html" title="CHANGELOG" 1.43 + accesskey="N">next</a> |</li> 1.44 + <li class="right" > 1.45 + <a href="examples.html" title="Further Examples" 1.46 + accesskey="P">previous</a> |</li> 1.47 + <li><a href="index.html">Mock 1.0.0 documentation</a> »</li> 1.48 + </ul> 1.49 + </div> 1.50 + 1.51 + <div class="document"> 1.52 + <div class="documentwrapper"> 1.53 + <div class="bodywrapper"> 1.54 + <div class="body"> 1.55 + 1.56 + <div class="section" id="mock-library-comparison"> 1.57 +<h1>Mock Library Comparison<a class="headerlink" href="#mock-library-comparison" title="Permalink to this headline">¶</a></h1> 1.58 +<p>A side-by-side comparison of how to accomplish some basic tasks with mock and 1.59 +some other popular Python mocking libraries and frameworks.</p> 1.60 +<p>These are:</p> 1.61 +<ul class="simple"> 1.62 +<li><a class="reference external" href="http://pypi.python.org/pypi/flexmock">flexmock</a></li> 1.63 +<li><a class="reference external" href="http://pypi.python.org/pypi/mox">mox</a></li> 1.64 +<li><a class="reference external" href="http://niemeyer.net/mocker">Mocker</a></li> 1.65 +<li><a class="reference external" href="http://pypi.python.org/pypi/dingus">dingus</a></li> 1.66 +<li><a class="reference external" href="http://pypi.python.org/pypi/fudge">fudge</a></li> 1.67 +</ul> 1.68 +<p>Popular python mocking frameworks not yet represented here include 1.69 +<a class="reference external" href="http://pypi.python.org/pypi/MiniMock">MiniMock</a>.</p> 1.70 +<p><a class="reference external" href="http://pmock.sourceforge.net/">pMock</a> (last release 2004 and doesn’t import 1.71 +in recent versions of Python) and 1.72 +<a class="reference external" href="http://python-mock.sourceforge.net/">python-mock</a> (last release 2005) are 1.73 +intentionally omitted.</p> 1.74 +<div class="admonition note"> 1.75 +<p class="first admonition-title">Note</p> 1.76 +<p>A more up to date, and tested for all mock libraries (only the mock 1.77 +examples on this page can be executed as doctests) version of this 1.78 +comparison is maintained by Gary Bernhardt:</p> 1.79 +<ul class="last simple"> 1.80 +<li><a class="reference external" href="http://garybernhardt.github.com/python-mock-comparison/">Python Mock Library Comparison</a></li> 1.81 +</ul> 1.82 +</div> 1.83 +<p>This comparison is by no means complete, and also may not be fully idiomatic 1.84 +for all the libraries represented. <em>Please</em> contribute corrections, missing 1.85 +comparisons, or comparisons for additional libraries to the <a class="reference external" href="https://code.google.com/p/mock/issues/list">mock issue 1.86 +tracker</a>.</p> 1.87 +<p>This comparison page was originally created by the <a class="reference external" href="https://code.google.com/p/pymox/wiki/MoxComparison">Mox project</a> and then extended for 1.88 +<a class="reference external" href="http://has207.github.com/flexmock/compare.html">flexmock and mock</a> by 1.89 +Herman Sheremetyev. Dingus examples written by <a class="reference external" href="http://garybernhardt.github.com/python-mock-comparison/">Gary Bernhadt</a>. fudge examples 1.90 +provided by <a class="reference external" href="http://farmdev.com/">Kumar McMillan</a>.</p> 1.91 +<div class="admonition note"> 1.92 +<p class="first admonition-title">Note</p> 1.93 +<p>The examples tasks here were originally created by Mox which is a mocking 1.94 +<em>framework</em> rather than a library like mock. The tasks shown naturally 1.95 +exemplify tasks that frameworks are good at and not the ones they make 1.96 +harder. In particular you can take a <cite>Mock</cite> or <cite>MagicMock</cite> object and use 1.97 +it in any way you want with no up-front configuration. The same is also 1.98 +true for Dingus.</p> 1.99 +<p class="last">The examples for mock here assume version 0.7.0.</p> 1.100 +</div> 1.101 +<div class="section" id="simple-fake-object"> 1.102 +<h2>Simple fake object<a class="headerlink" href="#simple-fake-object" title="Permalink to this headline">¶</a></h2> 1.103 +<div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="c"># mock</span> 1.104 +<span class="gp">>>> </span><span class="n">my_mock</span> <span class="o">=</span> <span class="n">mock</span><span class="o">.</span><span class="n">Mock</span><span class="p">()</span> 1.105 +<span class="gp">>>> </span><span class="n">my_mock</span><span class="o">.</span><span class="n">some_method</span><span class="o">.</span><span class="n">return_value</span> <span class="o">=</span> <span class="s">"calculated value"</span> 1.106 +<span class="gp">>>> </span><span class="n">my_mock</span><span class="o">.</span><span class="n">some_attribute</span> <span class="o">=</span> <span class="s">"value"</span> 1.107 +<span class="gp">>>> </span><span class="n">assertEqual</span><span class="p">(</span><span class="s">"calculated value"</span><span class="p">,</span> <span class="n">my_mock</span><span class="o">.</span><span class="n">some_method</span><span class="p">())</span> 1.108 +<span class="gp">>>> </span><span class="n">assertEqual</span><span class="p">(</span><span class="s">"value"</span><span class="p">,</span> <span class="n">my_mock</span><span class="o">.</span><span class="n">some_attribute</span><span class="p">)</span> 1.109 +</pre></div> 1.110 +</div> 1.111 +<div class="highlight-python"><div class="highlight"><pre><span class="c"># Flexmock</span> 1.112 +<span class="n">mock</span> <span class="o">=</span> <span class="n">flexmock</span><span class="p">(</span><span class="n">some_method</span><span class="o">=</span><span class="k">lambda</span><span class="p">:</span> <span class="s">"calculated value"</span><span class="p">,</span> <span class="n">some_attribute</span><span class="o">=</span><span class="s">"value"</span><span class="p">)</span> 1.113 +<span class="n">assertEqual</span><span class="p">(</span><span class="s">"calculated value"</span><span class="p">,</span> <span class="n">mock</span><span class="o">.</span><span class="n">some_method</span><span class="p">())</span> 1.114 +<span class="n">assertEqual</span><span class="p">(</span><span class="s">"value"</span><span class="p">,</span> <span class="n">mock</span><span class="o">.</span><span class="n">some_attribute</span><span class="p">)</span> 1.115 + 1.116 +<span class="c"># Mox</span> 1.117 +<span class="n">mock</span> <span class="o">=</span> <span class="n">mox</span><span class="o">.</span><span class="n">MockAnything</span><span class="p">()</span> 1.118 +<span class="n">mock</span><span class="o">.</span><span class="n">some_method</span><span class="p">()</span><span class="o">.</span><span class="n">AndReturn</span><span class="p">(</span><span class="s">"calculated value"</span><span class="p">)</span> 1.119 +<span class="n">mock</span><span class="o">.</span><span class="n">some_attribute</span> <span class="o">=</span> <span class="s">"value"</span> 1.120 +<span class="n">mox</span><span class="o">.</span><span class="n">Replay</span><span class="p">(</span><span class="n">mock</span><span class="p">)</span> 1.121 +<span class="n">assertEqual</span><span class="p">(</span><span class="s">"calculated value"</span><span class="p">,</span> <span class="n">mock</span><span class="o">.</span><span class="n">some_method</span><span class="p">())</span> 1.122 +<span class="n">assertEqual</span><span class="p">(</span><span class="s">"value"</span><span class="p">,</span> <span class="n">mock</span><span class="o">.</span><span class="n">some_attribute</span><span class="p">)</span> 1.123 + 1.124 +<span class="c"># Mocker</span> 1.125 +<span class="n">mock</span> <span class="o">=</span> <span class="n">mocker</span><span class="o">.</span><span class="n">mock</span><span class="p">()</span> 1.126 +<span class="n">mock</span><span class="o">.</span><span class="n">some_method</span><span class="p">()</span> 1.127 +<span class="n">mocker</span><span class="o">.</span><span class="n">result</span><span class="p">(</span><span class="s">"calculated value"</span><span class="p">)</span> 1.128 +<span class="n">mocker</span><span class="o">.</span><span class="n">replay</span><span class="p">()</span> 1.129 +<span class="n">mock</span><span class="o">.</span><span class="n">some_attribute</span> <span class="o">=</span> <span class="s">"value"</span> 1.130 +<span class="n">assertEqual</span><span class="p">(</span><span class="s">"calculated value"</span><span class="p">,</span> <span class="n">mock</span><span class="o">.</span><span class="n">some_method</span><span class="p">())</span> 1.131 +<span class="n">assertEqual</span><span class="p">(</span><span class="s">"value"</span><span class="p">,</span> <span class="n">mock</span><span class="o">.</span><span class="n">some_attribute</span><span class="p">)</span> 1.132 +</pre></div> 1.133 +</div> 1.134 +<div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="c"># Dingus</span> 1.135 +<span class="gp">>>> </span><span class="n">my_dingus</span> <span class="o">=</span> <span class="n">dingus</span><span class="o">.</span><span class="n">Dingus</span><span class="p">(</span><span class="n">some_attribute</span><span class="o">=</span><span class="s">"value"</span><span class="p">,</span> 1.136 +<span class="gp">... </span> <span class="n">some_method__returns</span><span class="o">=</span><span class="s">"calculated value"</span><span class="p">)</span> 1.137 +<span class="gp">>>> </span><span class="n">assertEqual</span><span class="p">(</span><span class="s">"calculated value"</span><span class="p">,</span> <span class="n">my_dingus</span><span class="o">.</span><span class="n">some_method</span><span class="p">())</span> 1.138 +<span class="gp">>>> </span><span class="n">assertEqual</span><span class="p">(</span><span class="s">"value"</span><span class="p">,</span> <span class="n">my_dingus</span><span class="o">.</span><span class="n">some_attribute</span><span class="p">)</span> 1.139 +</pre></div> 1.140 +</div> 1.141 +<div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="c"># fudge</span> 1.142 +<span class="gp">>>> </span><span class="n">my_fake</span> <span class="o">=</span> <span class="p">(</span><span class="n">fudge</span><span class="o">.</span><span class="n">Fake</span><span class="p">()</span> 1.143 +<span class="gp">... </span> <span class="o">.</span><span class="n">provides</span><span class="p">(</span><span class="s">'some_method'</span><span class="p">)</span> 1.144 +<span class="gp">... </span> <span class="o">.</span><span class="n">returns</span><span class="p">(</span><span class="s">"calculated value"</span><span class="p">)</span> 1.145 +<span class="gp">... </span> <span class="o">.</span><span class="n">has_attr</span><span class="p">(</span><span class="n">some_attribute</span><span class="o">=</span><span class="s">"value"</span><span class="p">))</span> 1.146 +<span class="gp">...</span> 1.147 +<span class="gp">>>> </span><span class="n">assertEqual</span><span class="p">(</span><span class="s">"calculated value"</span><span class="p">,</span> <span class="n">my_fake</span><span class="o">.</span><span class="n">some_method</span><span class="p">())</span> 1.148 +<span class="gp">>>> </span><span class="n">assertEqual</span><span class="p">(</span><span class="s">"value"</span><span class="p">,</span> <span class="n">my_fake</span><span class="o">.</span><span class="n">some_attribute</span><span class="p">)</span> 1.149 +</pre></div> 1.150 +</div> 1.151 +</div> 1.152 +<div class="section" id="simple-mock"> 1.153 +<h2>Simple mock<a class="headerlink" href="#simple-mock" title="Permalink to this headline">¶</a></h2> 1.154 +<div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="c"># mock</span> 1.155 +<span class="gp">>>> </span><span class="n">my_mock</span> <span class="o">=</span> <span class="n">mock</span><span class="o">.</span><span class="n">Mock</span><span class="p">()</span> 1.156 +<span class="gp">>>> </span><span class="n">my_mock</span><span class="o">.</span><span class="n">some_method</span><span class="o">.</span><span class="n">return_value</span> <span class="o">=</span> <span class="s">"value"</span> 1.157 +<span class="gp">>>> </span><span class="n">assertEqual</span><span class="p">(</span><span class="s">"value"</span><span class="p">,</span> <span class="n">my_mock</span><span class="o">.</span><span class="n">some_method</span><span class="p">())</span> 1.158 +<span class="gp">>>> </span><span class="n">my_mock</span><span class="o">.</span><span class="n">some_method</span><span class="o">.</span><span class="n">assert_called_once_with</span><span class="p">()</span> 1.159 +</pre></div> 1.160 +</div> 1.161 +<div class="highlight-python"><div class="highlight"><pre><span class="c"># Flexmock</span> 1.162 +<span class="n">mock</span> <span class="o">=</span> <span class="n">flexmock</span><span class="p">()</span> 1.163 +<span class="n">mock</span><span class="o">.</span><span class="n">should_receive</span><span class="p">(</span><span class="s">"some_method"</span><span class="p">)</span><span class="o">.</span><span class="n">and_return</span><span class="p">(</span><span class="s">"value"</span><span class="p">)</span><span class="o">.</span><span class="n">once</span> 1.164 +<span class="n">assertEqual</span><span class="p">(</span><span class="s">"value"</span><span class="p">,</span> <span class="n">mock</span><span class="o">.</span><span class="n">some_method</span><span class="p">())</span> 1.165 + 1.166 +<span class="c"># Mox</span> 1.167 +<span class="n">mock</span> <span class="o">=</span> <span class="n">mox</span><span class="o">.</span><span class="n">MockAnything</span><span class="p">()</span> 1.168 +<span class="n">mock</span><span class="o">.</span><span class="n">some_method</span><span class="p">()</span><span class="o">.</span><span class="n">AndReturn</span><span class="p">(</span><span class="s">"value"</span><span class="p">)</span> 1.169 +<span class="n">mox</span><span class="o">.</span><span class="n">Replay</span><span class="p">(</span><span class="n">mock</span><span class="p">)</span> 1.170 +<span class="n">assertEqual</span><span class="p">(</span><span class="s">"value"</span><span class="p">,</span> <span class="n">mock</span><span class="o">.</span><span class="n">some_method</span><span class="p">())</span> 1.171 +<span class="n">mox</span><span class="o">.</span><span class="n">Verify</span><span class="p">(</span><span class="n">mock</span><span class="p">)</span> 1.172 + 1.173 +<span class="c"># Mocker</span> 1.174 +<span class="n">mock</span> <span class="o">=</span> <span class="n">mocker</span><span class="o">.</span><span class="n">mock</span><span class="p">()</span> 1.175 +<span class="n">mock</span><span class="o">.</span><span class="n">some_method</span><span class="p">()</span> 1.176 +<span class="n">mocker</span><span class="o">.</span><span class="n">result</span><span class="p">(</span><span class="s">"value"</span><span class="p">)</span> 1.177 +<span class="n">mocker</span><span class="o">.</span><span class="n">replay</span><span class="p">()</span> 1.178 +<span class="n">assertEqual</span><span class="p">(</span><span class="s">"value"</span><span class="p">,</span> <span class="n">mock</span><span class="o">.</span><span class="n">some_method</span><span class="p">())</span> 1.179 +<span class="n">mocker</span><span class="o">.</span><span class="n">verify</span><span class="p">()</span> 1.180 +</pre></div> 1.181 +</div> 1.182 +<div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="c"># Dingus</span> 1.183 +<span class="gp">>>> </span><span class="n">my_dingus</span> <span class="o">=</span> <span class="n">dingus</span><span class="o">.</span><span class="n">Dingus</span><span class="p">(</span><span class="n">some_method__returns</span><span class="o">=</span><span class="s">"value"</span><span class="p">)</span> 1.184 +<span class="gp">>>> </span><span class="n">assertEqual</span><span class="p">(</span><span class="s">"value"</span><span class="p">,</span> <span class="n">my_dingus</span><span class="o">.</span><span class="n">some_method</span><span class="p">())</span> 1.185 +<span class="gp">>>> </span><span class="k">assert</span> <span class="n">my_dingus</span><span class="o">.</span><span class="n">some_method</span><span class="o">.</span><span class="n">calls</span><span class="p">()</span><span class="o">.</span><span class="n">once</span><span class="p">()</span> 1.186 +</pre></div> 1.187 +</div> 1.188 +<div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="c"># fudge</span> 1.189 +<span class="gp">>>> </span><span class="nd">@fudge.test</span> 1.190 +<span class="gp">... </span><span class="k">def</span> <span class="nf">test</span><span class="p">():</span> 1.191 +<span class="gp">... </span> <span class="n">my_fake</span> <span class="o">=</span> <span class="p">(</span><span class="n">fudge</span><span class="o">.</span><span class="n">Fake</span><span class="p">()</span> 1.192 +<span class="gp">... </span> <span class="o">.</span><span class="n">expects</span><span class="p">(</span><span class="s">'some_method'</span><span class="p">)</span> 1.193 +<span class="gp">... </span> <span class="o">.</span><span class="n">returns</span><span class="p">(</span><span class="s">"value"</span><span class="p">)</span> 1.194 +<span class="gp">... </span> <span class="o">.</span><span class="n">times_called</span><span class="p">(</span><span class="mi">1</span><span class="p">))</span> 1.195 +<span class="gp">...</span> 1.196 +<span class="gp">>>> </span><span class="n">test</span><span class="p">()</span> 1.197 +<span class="gt">Traceback (most recent call last):</span> 1.198 +<span class="c">...</span> 1.199 +<span class="gr">AssertionError</span>: <span class="n">fake:my_fake.some_method() was not called</span> 1.200 +</pre></div> 1.201 +</div> 1.202 +</div> 1.203 +<div class="section" id="creating-partial-mocks"> 1.204 +<h2>Creating partial mocks<a class="headerlink" href="#creating-partial-mocks" title="Permalink to this headline">¶</a></h2> 1.205 +<div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="c"># mock</span> 1.206 +<span class="gp">>>> </span><span class="n">SomeObject</span><span class="o">.</span><span class="n">some_method</span> <span class="o">=</span> <span class="n">mock</span><span class="o">.</span><span class="n">Mock</span><span class="p">(</span><span class="n">return_value</span><span class="o">=</span><span class="s">'value'</span><span class="p">)</span> 1.207 +<span class="gp">>>> </span><span class="n">assertEqual</span><span class="p">(</span><span class="s">"value"</span><span class="p">,</span> <span class="n">SomeObject</span><span class="o">.</span><span class="n">some_method</span><span class="p">())</span> 1.208 +</pre></div> 1.209 +</div> 1.210 +<div class="highlight-python"><div class="highlight"><pre><span class="c"># Flexmock</span> 1.211 +<span class="n">flexmock</span><span class="p">(</span><span class="n">SomeObject</span><span class="p">)</span><span class="o">.</span><span class="n">should_receive</span><span class="p">(</span><span class="s">"some_method"</span><span class="p">)</span><span class="o">.</span><span class="n">and_return</span><span class="p">(</span><span class="s">'value'</span><span class="p">)</span> 1.212 +<span class="n">assertEqual</span><span class="p">(</span><span class="s">"value"</span><span class="p">,</span> <span class="n">mock</span><span class="o">.</span><span class="n">some_method</span><span class="p">())</span> 1.213 + 1.214 +<span class="c"># Mox</span> 1.215 +<span class="n">mock</span> <span class="o">=</span> <span class="n">mox</span><span class="o">.</span><span class="n">MockObject</span><span class="p">(</span><span class="n">SomeObject</span><span class="p">)</span> 1.216 +<span class="n">mock</span><span class="o">.</span><span class="n">some_method</span><span class="p">()</span><span class="o">.</span><span class="n">AndReturn</span><span class="p">(</span><span class="s">"value"</span><span class="p">)</span> 1.217 +<span class="n">mox</span><span class="o">.</span><span class="n">Replay</span><span class="p">(</span><span class="n">mock</span><span class="p">)</span> 1.218 +<span class="n">assertEqual</span><span class="p">(</span><span class="s">"value"</span><span class="p">,</span> <span class="n">mock</span><span class="o">.</span><span class="n">some_method</span><span class="p">())</span> 1.219 +<span class="n">mox</span><span class="o">.</span><span class="n">Verify</span><span class="p">(</span><span class="n">mock</span><span class="p">)</span> 1.220 + 1.221 +<span class="c"># Mocker</span> 1.222 +<span class="n">mock</span> <span class="o">=</span> <span class="n">mocker</span><span class="o">.</span><span class="n">mock</span><span class="p">(</span><span class="n">SomeObject</span><span class="p">)</span> 1.223 +<span class="n">mock</span><span class="o">.</span><span class="n">Get</span><span class="p">()</span> 1.224 +<span class="n">mocker</span><span class="o">.</span><span class="n">result</span><span class="p">(</span><span class="s">"value"</span><span class="p">)</span> 1.225 +<span class="n">mocker</span><span class="o">.</span><span class="n">replay</span><span class="p">()</span> 1.226 +<span class="n">assertEqual</span><span class="p">(</span><span class="s">"value"</span><span class="p">,</span> <span class="n">mock</span><span class="o">.</span><span class="n">some_method</span><span class="p">())</span> 1.227 +<span class="n">mocker</span><span class="o">.</span><span class="n">verify</span><span class="p">()</span> 1.228 +</pre></div> 1.229 +</div> 1.230 +<div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="c"># Dingus</span> 1.231 +<span class="gp">>>> </span><span class="nb">object</span> <span class="o">=</span> <span class="n">SomeObject</span> 1.232 +<span class="gp">>>> </span><span class="nb">object</span><span class="o">.</span><span class="n">some_method</span> <span class="o">=</span> <span class="n">dingus</span><span class="o">.</span><span class="n">Dingus</span><span class="p">(</span><span class="n">return_value</span><span class="o">=</span><span class="s">"value"</span><span class="p">)</span> 1.233 +<span class="gp">>>> </span><span class="n">assertEqual</span><span class="p">(</span><span class="s">"value"</span><span class="p">,</span> <span class="nb">object</span><span class="o">.</span><span class="n">some_method</span><span class="p">())</span> 1.234 +</pre></div> 1.235 +</div> 1.236 +<div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="c"># fudge</span> 1.237 +<span class="gp">>>> </span><span class="n">fake</span> <span class="o">=</span> <span class="n">fudge</span><span class="o">.</span><span class="n">Fake</span><span class="p">()</span><span class="o">.</span><span class="n">is_callable</span><span class="p">()</span><span class="o">.</span><span class="n">returns</span><span class="p">(</span><span class="s">"<fudge-value>"</span><span class="p">)</span> 1.238 +<span class="gp">>>> </span><span class="k">with</span> <span class="n">fudge</span><span class="o">.</span><span class="n">patched_context</span><span class="p">(</span><span class="n">SomeObject</span><span class="p">,</span> <span class="s">'some_method'</span><span class="p">,</span> <span class="n">fake</span><span class="p">):</span> 1.239 +<span class="gp">... </span> <span class="n">s</span> <span class="o">=</span> <span class="n">SomeObject</span><span class="p">()</span> 1.240 +<span class="gp">... </span> <span class="n">assertEqual</span><span class="p">(</span><span class="s">"<fudge-value>"</span><span class="p">,</span> <span class="n">s</span><span class="o">.</span><span class="n">some_method</span><span class="p">())</span> 1.241 +<span class="gp">...</span> 1.242 +</pre></div> 1.243 +</div> 1.244 +</div> 1.245 +<div class="section" id="ensure-calls-are-made-in-specific-order"> 1.246 +<h2>Ensure calls are made in specific order<a class="headerlink" href="#ensure-calls-are-made-in-specific-order" title="Permalink to this headline">¶</a></h2> 1.247 +<div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="c"># mock</span> 1.248 +<span class="gp">>>> </span><span class="n">my_mock</span> <span class="o">=</span> <span class="n">mock</span><span class="o">.</span><span class="n">Mock</span><span class="p">(</span><span class="n">spec</span><span class="o">=</span><span class="n">SomeObject</span><span class="p">)</span> 1.249 +<span class="gp">>>> </span><span class="n">my_mock</span><span class="o">.</span><span class="n">method1</span><span class="p">()</span> 1.250 +<span class="go"><Mock name='mock.method1()' id='...'></span> 1.251 +<span class="gp">>>> </span><span class="n">my_mock</span><span class="o">.</span><span class="n">method2</span><span class="p">()</span> 1.252 +<span class="go"><Mock name='mock.method2()' id='...'></span> 1.253 +<span class="gp">>>> </span><span class="n">assertEqual</span><span class="p">(</span><span class="n">my_mock</span><span class="o">.</span><span class="n">mock_calls</span><span class="p">,</span> <span class="p">[</span><span class="n">call</span><span class="o">.</span><span class="n">method1</span><span class="p">(),</span> <span class="n">call</span><span class="o">.</span><span class="n">method2</span><span class="p">()])</span> 1.254 +</pre></div> 1.255 +</div> 1.256 +<div class="highlight-python"><div class="highlight"><pre><span class="c"># Flexmock</span> 1.257 +<span class="n">mock</span> <span class="o">=</span> <span class="n">flexmock</span><span class="p">(</span><span class="n">SomeObject</span><span class="p">)</span> 1.258 +<span class="n">mock</span><span class="o">.</span><span class="n">should_receive</span><span class="p">(</span><span class="s">'method1'</span><span class="p">)</span><span class="o">.</span><span class="n">once</span><span class="o">.</span><span class="n">ordered</span><span class="o">.</span><span class="n">and_return</span><span class="p">(</span><span class="s">'first thing'</span><span class="p">)</span> 1.259 +<span class="n">mock</span><span class="o">.</span><span class="n">should_receive</span><span class="p">(</span><span class="s">'method2'</span><span class="p">)</span><span class="o">.</span><span class="n">once</span><span class="o">.</span><span class="n">ordered</span><span class="o">.</span><span class="n">and_return</span><span class="p">(</span><span class="s">'second thing'</span><span class="p">)</span> 1.260 + 1.261 +<span class="c"># Mox</span> 1.262 +<span class="n">mock</span> <span class="o">=</span> <span class="n">mox</span><span class="o">.</span><span class="n">MockObject</span><span class="p">(</span><span class="n">SomeObject</span><span class="p">)</span> 1.263 +<span class="n">mock</span><span class="o">.</span><span class="n">method1</span><span class="p">()</span><span class="o">.</span><span class="n">AndReturn</span><span class="p">(</span><span class="s">'first thing'</span><span class="p">)</span> 1.264 +<span class="n">mock</span><span class="o">.</span><span class="n">method2</span><span class="p">()</span><span class="o">.</span><span class="n">AndReturn</span><span class="p">(</span><span class="s">'second thing'</span><span class="p">)</span> 1.265 +<span class="n">mox</span><span class="o">.</span><span class="n">Replay</span><span class="p">(</span><span class="n">mock</span><span class="p">)</span> 1.266 +<span class="n">mox</span><span class="o">.</span><span class="n">Verify</span><span class="p">(</span><span class="n">mock</span><span class="p">)</span> 1.267 + 1.268 +<span class="c"># Mocker</span> 1.269 +<span class="n">mock</span> <span class="o">=</span> <span class="n">mocker</span><span class="o">.</span><span class="n">mock</span><span class="p">()</span> 1.270 +<span class="k">with</span> <span class="n">mocker</span><span class="o">.</span><span class="n">order</span><span class="p">():</span> 1.271 + <span class="n">mock</span><span class="o">.</span><span class="n">method1</span><span class="p">()</span> 1.272 + <span class="n">mocker</span><span class="o">.</span><span class="n">result</span><span class="p">(</span><span class="s">'first thing'</span><span class="p">)</span> 1.273 + <span class="n">mock</span><span class="o">.</span><span class="n">method2</span><span class="p">()</span> 1.274 + <span class="n">mocker</span><span class="o">.</span><span class="n">result</span><span class="p">(</span><span class="s">'second thing'</span><span class="p">)</span> 1.275 + <span class="n">mocker</span><span class="o">.</span><span class="n">replay</span><span class="p">()</span> 1.276 + <span class="n">mocker</span><span class="o">.</span><span class="n">verify</span><span class="p">()</span> 1.277 +</pre></div> 1.278 +</div> 1.279 +<div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="c"># Dingus</span> 1.280 +<span class="gp">>>> </span><span class="n">my_dingus</span> <span class="o">=</span> <span class="n">dingus</span><span class="o">.</span><span class="n">Dingus</span><span class="p">()</span> 1.281 +<span class="gp">>>> </span><span class="n">my_dingus</span><span class="o">.</span><span class="n">method1</span><span class="p">()</span> 1.282 +<span class="go"><Dingus ...></span> 1.283 +<span class="gp">>>> </span><span class="n">my_dingus</span><span class="o">.</span><span class="n">method2</span><span class="p">()</span> 1.284 +<span class="go"><Dingus ...></span> 1.285 +<span class="gp">>>> </span><span class="n">assertEqual</span><span class="p">([</span><span class="s">'method1'</span><span class="p">,</span> <span class="s">'method2'</span><span class="p">],</span> <span class="p">[</span><span class="n">call</span><span class="o">.</span><span class="n">name</span> <span class="k">for</span> <span class="n">call</span> <span class="ow">in</span> <span class="n">my_dingus</span><span class="o">.</span><span class="n">calls</span><span class="p">])</span> 1.286 +</pre></div> 1.287 +</div> 1.288 +<div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="c"># fudge</span> 1.289 +<span class="gp">>>> </span><span class="nd">@fudge.test</span> 1.290 +<span class="gp">... </span><span class="k">def</span> <span class="nf">test</span><span class="p">():</span> 1.291 +<span class="gp">... </span> <span class="n">my_fake</span> <span class="o">=</span> <span class="p">(</span><span class="n">fudge</span><span class="o">.</span><span class="n">Fake</span><span class="p">()</span> 1.292 +<span class="gp">... </span> <span class="o">.</span><span class="n">remember_order</span><span class="p">()</span> 1.293 +<span class="gp">... </span> <span class="o">.</span><span class="n">expects</span><span class="p">(</span><span class="s">'method1'</span><span class="p">)</span> 1.294 +<span class="gp">... </span> <span class="o">.</span><span class="n">expects</span><span class="p">(</span><span class="s">'method2'</span><span class="p">))</span> 1.295 +<span class="gp">... </span> <span class="n">my_fake</span><span class="o">.</span><span class="n">method2</span><span class="p">()</span> 1.296 +<span class="gp">... </span> <span class="n">my_fake</span><span class="o">.</span><span class="n">method1</span><span class="p">()</span> 1.297 +<span class="gp">...</span> 1.298 +<span class="gp">>>> </span><span class="n">test</span><span class="p">()</span> 1.299 +<span class="gt">Traceback (most recent call last):</span> 1.300 +<span class="c">...</span> 1.301 +<span class="gr">AssertionError: Call #1 was fake:my_fake.method2(); Expected</span>: <span class="n">#1 fake:my_fake.method1(), #2 fake:my_fake.method2(), end</span> 1.302 +</pre></div> 1.303 +</div> 1.304 +</div> 1.305 +<div class="section" id="raising-exceptions"> 1.306 +<h2>Raising exceptions<a class="headerlink" href="#raising-exceptions" title="Permalink to this headline">¶</a></h2> 1.307 +<div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="c"># mock</span> 1.308 +<span class="gp">>>> </span><span class="n">my_mock</span> <span class="o">=</span> <span class="n">mock</span><span class="o">.</span><span class="n">Mock</span><span class="p">()</span> 1.309 +<span class="gp">>>> </span><span class="n">my_mock</span><span class="o">.</span><span class="n">some_method</span><span class="o">.</span><span class="n">side_effect</span> <span class="o">=</span> <span class="n">SomeException</span><span class="p">(</span><span class="s">"message"</span><span class="p">)</span> 1.310 +<span class="gp">>>> </span><span class="n">assertRaises</span><span class="p">(</span><span class="n">SomeException</span><span class="p">,</span> <span class="n">my_mock</span><span class="o">.</span><span class="n">some_method</span><span class="p">)</span> 1.311 +</pre></div> 1.312 +</div> 1.313 +<div class="highlight-python"><div class="highlight"><pre><span class="c"># Flexmock</span> 1.314 +<span class="n">mock</span> <span class="o">=</span> <span class="n">flexmock</span><span class="p">()</span> 1.315 +<span class="n">mock</span><span class="o">.</span><span class="n">should_receive</span><span class="p">(</span><span class="s">"some_method"</span><span class="p">)</span><span class="o">.</span><span class="n">and_raise</span><span class="p">(</span><span class="n">SomeException</span><span class="p">(</span><span class="s">"message"</span><span class="p">))</span> 1.316 +<span class="n">assertRaises</span><span class="p">(</span><span class="n">SomeException</span><span class="p">,</span> <span class="n">mock</span><span class="o">.</span><span class="n">some_method</span><span class="p">)</span> 1.317 + 1.318 +<span class="c"># Mox</span> 1.319 +<span class="n">mock</span> <span class="o">=</span> <span class="n">mox</span><span class="o">.</span><span class="n">MockAnything</span><span class="p">()</span> 1.320 +<span class="n">mock</span><span class="o">.</span><span class="n">some_method</span><span class="p">()</span><span class="o">.</span><span class="n">AndRaise</span><span class="p">(</span><span class="n">SomeException</span><span class="p">(</span><span class="s">"message"</span><span class="p">))</span> 1.321 +<span class="n">mox</span><span class="o">.</span><span class="n">Replay</span><span class="p">(</span><span class="n">mock</span><span class="p">)</span> 1.322 +<span class="n">assertRaises</span><span class="p">(</span><span class="n">SomeException</span><span class="p">,</span> <span class="n">mock</span><span class="o">.</span><span class="n">some_method</span><span class="p">)</span> 1.323 +<span class="n">mox</span><span class="o">.</span><span class="n">Verify</span><span class="p">(</span><span class="n">mock</span><span class="p">)</span> 1.324 + 1.325 +<span class="c"># Mocker</span> 1.326 +<span class="n">mock</span> <span class="o">=</span> <span class="n">mocker</span><span class="o">.</span><span class="n">mock</span><span class="p">()</span> 1.327 +<span class="n">mock</span><span class="o">.</span><span class="n">some_method</span><span class="p">()</span> 1.328 +<span class="n">mocker</span><span class="o">.</span><span class="n">throw</span><span class="p">(</span><span class="n">SomeException</span><span class="p">(</span><span class="s">"message"</span><span class="p">))</span> 1.329 +<span class="n">mocker</span><span class="o">.</span><span class="n">replay</span><span class="p">()</span> 1.330 +<span class="n">assertRaises</span><span class="p">(</span><span class="n">SomeException</span><span class="p">,</span> <span class="n">mock</span><span class="o">.</span><span class="n">some_method</span><span class="p">)</span> 1.331 +<span class="n">mocker</span><span class="o">.</span><span class="n">verify</span><span class="p">()</span> 1.332 +</pre></div> 1.333 +</div> 1.334 +<div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="c"># Dingus</span> 1.335 +<span class="gp">>>> </span><span class="n">my_dingus</span> <span class="o">=</span> <span class="n">dingus</span><span class="o">.</span><span class="n">Dingus</span><span class="p">()</span> 1.336 +<span class="gp">>>> </span><span class="n">my_dingus</span><span class="o">.</span><span class="n">some_method</span> <span class="o">=</span> <span class="n">dingus</span><span class="o">.</span><span class="n">exception_raiser</span><span class="p">(</span><span class="n">SomeException</span><span class="p">)</span> 1.337 +<span class="gp">>>> </span><span class="n">assertRaises</span><span class="p">(</span><span class="n">SomeException</span><span class="p">,</span> <span class="n">my_dingus</span><span class="o">.</span><span class="n">some_method</span><span class="p">)</span> 1.338 +</pre></div> 1.339 +</div> 1.340 +<div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="c"># fudge</span> 1.341 +<span class="gp">>>> </span><span class="n">my_fake</span> <span class="o">=</span> <span class="p">(</span><span class="n">fudge</span><span class="o">.</span><span class="n">Fake</span><span class="p">()</span> 1.342 +<span class="gp">... </span> <span class="o">.</span><span class="n">is_callable</span><span class="p">()</span> 1.343 +<span class="gp">... </span> <span class="o">.</span><span class="n">raises</span><span class="p">(</span><span class="n">SomeException</span><span class="p">(</span><span class="s">"message"</span><span class="p">)))</span> 1.344 +<span class="gp">...</span> 1.345 +<span class="gp">>>> </span><span class="n">my_fake</span><span class="p">()</span> 1.346 +<span class="gt">Traceback (most recent call last):</span> 1.347 +<span class="c">...</span> 1.348 +<span class="gr">SomeException</span>: <span class="n">message</span> 1.349 +</pre></div> 1.350 +</div> 1.351 +</div> 1.352 +<div class="section" id="override-new-instances-of-a-class"> 1.353 +<h2>Override new instances of a class<a class="headerlink" href="#override-new-instances-of-a-class" title="Permalink to this headline">¶</a></h2> 1.354 +<div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="c"># mock</span> 1.355 +<span class="gp">>>> </span><span class="k">with</span> <span class="n">mock</span><span class="o">.</span><span class="n">patch</span><span class="p">(</span><span class="s">'somemodule.Someclass'</span><span class="p">)</span> <span class="k">as</span> <span class="n">MockClass</span><span class="p">:</span> 1.356 +<span class="gp">... </span> <span class="n">MockClass</span><span class="o">.</span><span class="n">return_value</span> <span class="o">=</span> <span class="n">some_other_object</span> 1.357 +<span class="gp">... </span> <span class="n">assertEqual</span><span class="p">(</span><span class="n">some_other_object</span><span class="p">,</span> <span class="n">somemodule</span><span class="o">.</span><span class="n">Someclass</span><span class="p">())</span> 1.358 +<span class="gp">...</span> 1.359 +</pre></div> 1.360 +</div> 1.361 +<div class="highlight-python"><div class="highlight"><pre><span class="c"># Flexmock</span> 1.362 +<span class="n">flexmock</span><span class="p">(</span><span class="n">some_module</span><span class="o">.</span><span class="n">SomeClass</span><span class="p">,</span> <span class="n">new_instances</span><span class="o">=</span><span class="n">some_other_object</span><span class="p">)</span> 1.363 +<span class="n">assertEqual</span><span class="p">(</span><span class="n">some_other_object</span><span class="p">,</span> <span class="n">some_module</span><span class="o">.</span><span class="n">SomeClass</span><span class="p">())</span> 1.364 + 1.365 +<span class="c"># Mox</span> 1.366 +<span class="c"># (you will probably have mox.Mox() available as self.mox in a real test)</span> 1.367 +<span class="n">mox</span><span class="o">.</span><span class="n">Mox</span><span class="p">()</span><span class="o">.</span><span class="n">StubOutWithMock</span><span class="p">(</span><span class="n">some_module</span><span class="p">,</span> <span class="s">'SomeClass'</span><span class="p">,</span> <span class="n">use_mock_anything</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span> 1.368 +<span class="n">some_module</span><span class="o">.</span><span class="n">SomeClass</span><span class="p">()</span><span class="o">.</span><span class="n">AndReturn</span><span class="p">(</span><span class="n">some_other_object</span><span class="p">)</span> 1.369 +<span class="n">mox</span><span class="o">.</span><span class="n">ReplayAll</span><span class="p">()</span> 1.370 +<span class="n">assertEqual</span><span class="p">(</span><span class="n">some_other_object</span><span class="p">,</span> <span class="n">some_module</span><span class="o">.</span><span class="n">SomeClass</span><span class="p">())</span> 1.371 + 1.372 +<span class="c"># Mocker</span> 1.373 +<span class="n">instance</span> <span class="o">=</span> <span class="n">mocker</span><span class="o">.</span><span class="n">mock</span><span class="p">()</span> 1.374 +<span class="n">klass</span> <span class="o">=</span> <span class="n">mocker</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">SomeClass</span><span class="p">,</span> <span class="n">spec</span><span class="o">=</span><span class="bp">None</span><span class="p">)</span> 1.375 +<span class="n">klass</span><span class="p">(</span><span class="s">'expected'</span><span class="p">,</span> <span class="s">'args'</span><span class="p">)</span> 1.376 +<span class="n">mocker</span><span class="o">.</span><span class="n">result</span><span class="p">(</span><span class="n">instance</span><span class="p">)</span> 1.377 +</pre></div> 1.378 +</div> 1.379 +<div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="c"># Dingus</span> 1.380 +<span class="gp">>>> </span><span class="n">MockClass</span> <span class="o">=</span> <span class="n">dingus</span><span class="o">.</span><span class="n">Dingus</span><span class="p">(</span><span class="n">return_value</span><span class="o">=</span><span class="n">some_other_object</span><span class="p">)</span> 1.381 +<span class="gp">>>> </span><span class="k">with</span> <span class="n">dingus</span><span class="o">.</span><span class="n">patch</span><span class="p">(</span><span class="s">'somemodule.SomeClass'</span><span class="p">,</span> <span class="n">MockClass</span><span class="p">):</span> 1.382 +<span class="gp">... </span> <span class="n">assertEqual</span><span class="p">(</span><span class="n">some_other_object</span><span class="p">,</span> <span class="n">somemodule</span><span class="o">.</span><span class="n">SomeClass</span><span class="p">())</span> 1.383 +<span class="gp">...</span> 1.384 +</pre></div> 1.385 +</div> 1.386 +<div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="c"># fudge</span> 1.387 +<span class="gp">>>> </span><span class="nd">@fudge.patch</span><span class="p">(</span><span class="s">'somemodule.SomeClass'</span><span class="p">)</span> 1.388 +<span class="gp">... </span><span class="k">def</span> <span class="nf">test</span><span class="p">(</span><span class="n">FakeClass</span><span class="p">):</span> 1.389 +<span class="gp">... </span> <span class="n">FakeClass</span><span class="o">.</span><span class="n">is_callable</span><span class="p">()</span><span class="o">.</span><span class="n">returns</span><span class="p">(</span><span class="n">some_other_object</span><span class="p">)</span> 1.390 +<span class="gp">... </span> <span class="n">assertEqual</span><span class="p">(</span><span class="n">some_other_object</span><span class="p">,</span> <span class="n">somemodule</span><span class="o">.</span><span class="n">SomeClass</span><span class="p">())</span> 1.391 +<span class="gp">...</span> 1.392 +<span class="gp">>>> </span><span class="n">test</span><span class="p">()</span> 1.393 +</pre></div> 1.394 +</div> 1.395 +</div> 1.396 +<div class="section" id="call-the-same-method-multiple-times"> 1.397 +<h2>Call the same method multiple times<a class="headerlink" href="#call-the-same-method-multiple-times" title="Permalink to this headline">¶</a></h2> 1.398 +<div class="admonition note"> 1.399 +<p class="first admonition-title">Note</p> 1.400 +<p class="last">You don’t need to do <em>any</em> configuration to call <cite>mock.Mock()</cite> methods 1.401 +multiple times. Attributes like <cite>call_count</cite>, <cite>call_args_list</cite> and 1.402 +<cite>method_calls</cite> provide various different ways of making assertions about 1.403 +how the mock was used.</p> 1.404 +</div> 1.405 +<div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="c"># mock</span> 1.406 +<span class="gp">>>> </span><span class="n">my_mock</span> <span class="o">=</span> <span class="n">mock</span><span class="o">.</span><span class="n">Mock</span><span class="p">()</span> 1.407 +<span class="gp">>>> </span><span class="n">my_mock</span><span class="o">.</span><span class="n">some_method</span><span class="p">()</span> 1.408 +<span class="go"><Mock name='mock.some_method()' id='...'></span> 1.409 +<span class="gp">>>> </span><span class="n">my_mock</span><span class="o">.</span><span class="n">some_method</span><span class="p">()</span> 1.410 +<span class="go"><Mock name='mock.some_method()' id='...'></span> 1.411 +<span class="gp">>>> </span><span class="k">assert</span> <span class="n">my_mock</span><span class="o">.</span><span class="n">some_method</span><span class="o">.</span><span class="n">call_count</span> <span class="o">>=</span> <span class="mi">2</span> 1.412 +</pre></div> 1.413 +</div> 1.414 +<div class="highlight-python"><div class="highlight"><pre><span class="c"># Flexmock # (verifies that the method gets called at least twice)</span> 1.415 +<span class="n">flexmock</span><span class="p">(</span><span class="n">some_object</span><span class="p">)</span><span class="o">.</span><span class="n">should_receive</span><span class="p">(</span><span class="s">'some_method'</span><span class="p">)</span><span class="o">.</span><span class="n">at_least</span><span class="o">.</span><span class="n">twice</span> 1.416 + 1.417 +<span class="c"># Mox</span> 1.418 +<span class="c"># (does not support variable number of calls, so you need to create a new entry for each explicit call)</span> 1.419 +<span class="n">mock</span> <span class="o">=</span> <span class="n">mox</span><span class="o">.</span><span class="n">MockObject</span><span class="p">(</span><span class="n">some_object</span><span class="p">)</span> 1.420 +<span class="n">mock</span><span class="o">.</span><span class="n">some_method</span><span class="p">(</span><span class="n">mox</span><span class="o">.</span><span class="n">IgnoreArg</span><span class="p">(),</span> <span class="n">mox</span><span class="o">.</span><span class="n">IgnoreArg</span><span class="p">())</span> 1.421 +<span class="n">mock</span><span class="o">.</span><span class="n">some_method</span><span class="p">(</span><span class="n">mox</span><span class="o">.</span><span class="n">IgnoreArg</span><span class="p">(),</span> <span class="n">mox</span><span class="o">.</span><span class="n">IgnoreArg</span><span class="p">())</span> 1.422 +<span class="n">mox</span><span class="o">.</span><span class="n">Replay</span><span class="p">(</span><span class="n">mock</span><span class="p">)</span> 1.423 +<span class="n">mox</span><span class="o">.</span><span class="n">Verify</span><span class="p">(</span><span class="n">mock</span><span class="p">)</span> 1.424 + 1.425 +<span class="c"># Mocker</span> 1.426 +<span class="c"># (TODO)</span> 1.427 +</pre></div> 1.428 +</div> 1.429 +<div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="c"># Dingus</span> 1.430 +<span class="gp">>>> </span><span class="n">my_dingus</span> <span class="o">=</span> <span class="n">dingus</span><span class="o">.</span><span class="n">Dingus</span><span class="p">()</span> 1.431 +<span class="gp">>>> </span><span class="n">my_dingus</span><span class="o">.</span><span class="n">some_method</span><span class="p">()</span> 1.432 +<span class="go"><Dingus ...></span> 1.433 +<span class="gp">>>> </span><span class="n">my_dingus</span><span class="o">.</span><span class="n">some_method</span><span class="p">()</span> 1.434 +<span class="go"><Dingus ...></span> 1.435 +<span class="gp">>>> </span><span class="k">assert</span> <span class="nb">len</span><span class="p">(</span><span class="n">my_dingus</span><span class="o">.</span><span class="n">calls</span><span class="p">(</span><span class="s">'some_method'</span><span class="p">))</span> <span class="o">==</span> <span class="mi">2</span> 1.436 +</pre></div> 1.437 +</div> 1.438 +<div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="c"># fudge</span> 1.439 +<span class="gp">>>> </span><span class="nd">@fudge.test</span> 1.440 +<span class="gp">... </span><span class="k">def</span> <span class="nf">test</span><span class="p">():</span> 1.441 +<span class="gp">... </span> <span class="n">my_fake</span> <span class="o">=</span> <span class="n">fudge</span><span class="o">.</span><span class="n">Fake</span><span class="p">()</span><span class="o">.</span><span class="n">expects</span><span class="p">(</span><span class="s">'some_method'</span><span class="p">)</span><span class="o">.</span><span class="n">times_called</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span> 1.442 +<span class="gp">... </span> <span class="n">my_fake</span><span class="o">.</span><span class="n">some_method</span><span class="p">()</span> 1.443 +<span class="gp">...</span> 1.444 +<span class="gp">>>> </span><span class="n">test</span><span class="p">()</span> 1.445 +<span class="gt">Traceback (most recent call last):</span> 1.446 +<span class="c">...</span> 1.447 +<span class="gr">AssertionError</span>: <span class="n">fake:my_fake.some_method() was called 1 time(s). Expected 2.</span> 1.448 +</pre></div> 1.449 +</div> 1.450 +</div> 1.451 +<div class="section" id="mock-chained-methods"> 1.452 +<h2>Mock chained methods<a class="headerlink" href="#mock-chained-methods" title="Permalink to this headline">¶</a></h2> 1.453 +<div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="c"># mock</span> 1.454 +<span class="gp">>>> </span><span class="n">my_mock</span> <span class="o">=</span> <span class="n">mock</span><span class="o">.</span><span class="n">Mock</span><span class="p">()</span> 1.455 +<span class="gp">>>> </span><span class="n">method3</span> <span class="o">=</span> <span class="n">my_mock</span><span class="o">.</span><span class="n">method1</span><span class="o">.</span><span class="n">return_value</span><span class="o">.</span><span class="n">method2</span><span class="o">.</span><span class="n">return_value</span><span class="o">.</span><span class="n">method3</span> 1.456 +<span class="gp">>>> </span><span class="n">method3</span><span class="o">.</span><span class="n">return_value</span> <span class="o">=</span> <span class="s">'some value'</span> 1.457 +<span class="gp">>>> </span><span class="n">assertEqual</span><span class="p">(</span><span class="s">'some value'</span><span class="p">,</span> <span class="n">my_mock</span><span class="o">.</span><span class="n">method1</span><span class="p">()</span><span class="o">.</span><span class="n">method2</span><span class="p">()</span><span class="o">.</span><span class="n">method3</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">))</span> 1.458 +<span class="gp">>>> </span><span class="n">method3</span><span class="o">.</span><span class="n">assert_called_once_with</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span> 1.459 +</pre></div> 1.460 +</div> 1.461 +<div class="highlight-python"><div class="highlight"><pre><span class="c"># Flexmock</span> 1.462 +<span class="c"># (intermediate method calls are automatically assigned to temporary fake objects</span> 1.463 +<span class="c"># and can be called with any arguments)</span> 1.464 +<span class="n">flexmock</span><span class="p">(</span><span class="n">some_object</span><span class="p">)</span><span class="o">.</span><span class="n">should_receive</span><span class="p">(</span> 1.465 + <span class="s">'method1.method2.method3'</span> 1.466 +<span class="p">)</span><span class="o">.</span><span class="n">with_args</span><span class="p">(</span><span class="n">arg1</span><span class="p">,</span> <span class="n">arg2</span><span class="p">)</span><span class="o">.</span><span class="n">and_return</span><span class="p">(</span><span class="s">'some value'</span><span class="p">)</span> 1.467 +<span class="n">assertEqual</span><span class="p">(</span><span class="s">'some_value'</span><span class="p">,</span> <span class="n">some_object</span><span class="o">.</span><span class="n">method1</span><span class="p">()</span><span class="o">.</span><span class="n">method2</span><span class="p">()</span><span class="o">.</span><span class="n">method3</span><span class="p">(</span><span class="n">arg1</span><span class="p">,</span> <span class="n">arg2</span><span class="p">))</span> 1.468 +</pre></div> 1.469 +</div> 1.470 +<div class="highlight-python"><div class="highlight"><pre><span class="c"># Mox</span> 1.471 +<span class="n">mock</span> <span class="o">=</span> <span class="n">mox</span><span class="o">.</span><span class="n">MockObject</span><span class="p">(</span><span class="n">some_object</span><span class="p">)</span> 1.472 +<span class="n">mock2</span> <span class="o">=</span> <span class="n">mox</span><span class="o">.</span><span class="n">MockAnything</span><span class="p">()</span> 1.473 +<span class="n">mock3</span> <span class="o">=</span> <span class="n">mox</span><span class="o">.</span><span class="n">MockAnything</span><span class="p">()</span> 1.474 +<span class="n">mock</span><span class="o">.</span><span class="n">method1</span><span class="p">()</span><span class="o">.</span><span class="n">AndReturn</span><span class="p">(</span><span class="n">mock1</span><span class="p">)</span> 1.475 +<span class="n">mock2</span><span class="o">.</span><span class="n">method2</span><span class="p">()</span><span class="o">.</span><span class="n">AndReturn</span><span class="p">(</span><span class="n">mock2</span><span class="p">)</span> 1.476 +<span class="n">mock3</span><span class="o">.</span><span class="n">method3</span><span class="p">(</span><span class="n">arg1</span><span class="p">,</span> <span class="n">arg2</span><span class="p">)</span><span class="o">.</span><span class="n">AndReturn</span><span class="p">(</span><span class="s">'some_value'</span><span class="p">)</span> 1.477 +<span class="bp">self</span><span class="o">.</span><span class="n">mox</span><span class="o">.</span><span class="n">ReplayAll</span><span class="p">()</span> 1.478 +<span class="n">assertEqual</span><span class="p">(</span><span class="s">"some_value"</span><span class="p">,</span> <span class="n">some_object</span><span class="o">.</span><span class="n">method1</span><span class="p">()</span><span class="o">.</span><span class="n">method2</span><span class="p">()</span><span class="o">.</span><span class="n">method3</span><span class="p">(</span><span class="n">arg1</span><span class="p">,</span> <span class="n">arg2</span><span class="p">))</span> 1.479 +<span class="bp">self</span><span class="o">.</span><span class="n">mox</span><span class="o">.</span><span class="n">VerifyAll</span><span class="p">()</span> 1.480 + 1.481 +<span class="c"># Mocker</span> 1.482 +<span class="c"># (TODO)</span> 1.483 +</pre></div> 1.484 +</div> 1.485 +<div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="c"># Dingus</span> 1.486 +<span class="gp">>>> </span><span class="n">my_dingus</span> <span class="o">=</span> <span class="n">dingus</span><span class="o">.</span><span class="n">Dingus</span><span class="p">()</span> 1.487 +<span class="gp">>>> </span><span class="n">method3</span> <span class="o">=</span> <span class="n">my_dingus</span><span class="o">.</span><span class="n">method1</span><span class="o">.</span><span class="n">return_value</span><span class="o">.</span><span class="n">method2</span><span class="o">.</span><span class="n">return_value</span><span class="o">.</span><span class="n">method3</span> 1.488 +<span class="gp">>>> </span><span class="n">method3</span><span class="o">.</span><span class="n">return_value</span> <span class="o">=</span> <span class="s">'some value'</span> 1.489 +<span class="gp">>>> </span><span class="n">assertEqual</span><span class="p">(</span><span class="s">'some value'</span><span class="p">,</span> <span class="n">my_dingus</span><span class="o">.</span><span class="n">method1</span><span class="p">()</span><span class="o">.</span><span class="n">method2</span><span class="p">()</span><span class="o">.</span><span class="n">method3</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">))</span> 1.490 +<span class="gp">>>> </span><span class="k">assert</span> <span class="n">method3</span><span class="o">.</span><span class="n">calls</span><span class="p">(</span><span class="s">'()'</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span><span class="o">.</span><span class="n">once</span><span class="p">()</span> 1.491 +</pre></div> 1.492 +</div> 1.493 +<div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="c"># fudge</span> 1.494 +<span class="gp">>>> </span><span class="nd">@fudge.test</span> 1.495 +<span class="gp">... </span><span class="k">def</span> <span class="nf">test</span><span class="p">():</span> 1.496 +<span class="gp">... </span> <span class="n">my_fake</span> <span class="o">=</span> <span class="n">fudge</span><span class="o">.</span><span class="n">Fake</span><span class="p">()</span> 1.497 +<span class="gp">... </span> <span class="p">(</span><span class="n">my_fake</span> 1.498 +<span class="gp">... </span> <span class="o">.</span><span class="n">expects</span><span class="p">(</span><span class="s">'method1'</span><span class="p">)</span> 1.499 +<span class="gp">... </span> <span class="o">.</span><span class="n">returns_fake</span><span class="p">()</span> 1.500 +<span class="gp">... </span> <span class="o">.</span><span class="n">expects</span><span class="p">(</span><span class="s">'method2'</span><span class="p">)</span> 1.501 +<span class="gp">... </span> <span class="o">.</span><span class="n">returns_fake</span><span class="p">()</span> 1.502 +<span class="gp">... </span> <span class="o">.</span><span class="n">expects</span><span class="p">(</span><span class="s">'method3'</span><span class="p">)</span> 1.503 +<span class="gp">... </span> <span class="o">.</span><span class="n">with_args</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span> 1.504 +<span class="gp">... </span> <span class="o">.</span><span class="n">returns</span><span class="p">(</span><span class="s">'some value'</span><span class="p">))</span> 1.505 +<span class="gp">... </span> <span class="n">assertEqual</span><span class="p">(</span><span class="s">'some value'</span><span class="p">,</span> <span class="n">my_fake</span><span class="o">.</span><span class="n">method1</span><span class="p">()</span><span class="o">.</span><span class="n">method2</span><span class="p">()</span><span class="o">.</span><span class="n">method3</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">))</span> 1.506 +<span class="gp">...</span> 1.507 +<span class="gp">>>> </span><span class="n">test</span><span class="p">()</span> 1.508 +</pre></div> 1.509 +</div> 1.510 +</div> 1.511 +<div class="section" id="mocking-a-context-manager"> 1.512 +<h2>Mocking a context manager<a class="headerlink" href="#mocking-a-context-manager" title="Permalink to this headline">¶</a></h2> 1.513 +<p>Examples for mock, Dingus and fudge only (so far):</p> 1.514 +<div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="c"># mock</span> 1.515 +<span class="gp">>>> </span><span class="n">my_mock</span> <span class="o">=</span> <span class="n">mock</span><span class="o">.</span><span class="n">MagicMock</span><span class="p">()</span> 1.516 +<span class="gp">>>> </span><span class="k">with</span> <span class="n">my_mock</span><span class="p">:</span> 1.517 +<span class="gp">... </span> <span class="k">pass</span> 1.518 +<span class="gp">...</span> 1.519 +<span class="gp">>>> </span><span class="n">my_mock</span><span class="o">.</span><span class="n">__enter__</span><span class="o">.</span><span class="n">assert_called_with</span><span class="p">()</span> 1.520 +<span class="gp">>>> </span><span class="n">my_mock</span><span class="o">.</span><span class="n">__exit__</span><span class="o">.</span><span class="n">assert_called_with</span><span class="p">(</span><span class="bp">None</span><span class="p">,</span> <span class="bp">None</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span> 1.521 +</pre></div> 1.522 +</div> 1.523 +<div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="c"># Dingus (nothing special here; all dinguses are "magic mocks")</span> 1.524 +<span class="gp">>>> </span><span class="n">my_dingus</span> <span class="o">=</span> <span class="n">dingus</span><span class="o">.</span><span class="n">Dingus</span><span class="p">()</span> 1.525 +<span class="gp">>>> </span><span class="k">with</span> <span class="n">my_dingus</span><span class="p">:</span> 1.526 +<span class="gp">... </span> <span class="k">pass</span> 1.527 +<span class="gp">...</span> 1.528 +<span class="gp">>>> </span><span class="k">assert</span> <span class="n">my_dingus</span><span class="o">.</span><span class="n">__enter__</span><span class="o">.</span><span class="n">calls</span><span class="p">()</span> 1.529 +<span class="gp">>>> </span><span class="k">assert</span> <span class="n">my_dingus</span><span class="o">.</span><span class="n">__exit__</span><span class="o">.</span><span class="n">calls</span><span class="p">(</span><span class="s">'()'</span><span class="p">,</span> <span class="bp">None</span><span class="p">,</span> <span class="bp">None</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span> 1.530 +</pre></div> 1.531 +</div> 1.532 +<div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="c"># fudge</span> 1.533 +<span class="gp">>>> </span><span class="n">my_fake</span> <span class="o">=</span> <span class="n">fudge</span><span class="o">.</span><span class="n">Fake</span><span class="p">()</span><span class="o">.</span><span class="n">provides</span><span class="p">(</span><span class="s">'__enter__'</span><span class="p">)</span><span class="o">.</span><span class="n">provides</span><span class="p">(</span><span class="s">'__exit__'</span><span class="p">)</span> 1.534 +<span class="gp">>>> </span><span class="k">with</span> <span class="n">my_fake</span><span class="p">:</span> 1.535 +<span class="gp">... </span> <span class="k">pass</span> 1.536 +<span class="gp">...</span> 1.537 +</pre></div> 1.538 +</div> 1.539 +</div> 1.540 +<div class="section" id="mocking-the-builtin-open-used-as-a-context-manager"> 1.541 +<h2>Mocking the builtin open used as a context manager<a class="headerlink" href="#mocking-the-builtin-open-used-as-a-context-manager" title="Permalink to this headline">¶</a></h2> 1.542 +<p>Example for mock only (so far):</p> 1.543 +<div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="c"># mock</span> 1.544 +<span class="gp">>>> </span><span class="n">my_mock</span> <span class="o">=</span> <span class="n">mock</span><span class="o">.</span><span class="n">MagicMock</span><span class="p">()</span> 1.545 +<span class="gp">>>> </span><span class="k">with</span> <span class="n">mock</span><span class="o">.</span><span class="n">patch</span><span class="p">(</span><span class="s">'__builtin__.open'</span><span class="p">,</span> <span class="n">my_mock</span><span class="p">):</span> 1.546 +<span class="gp">... </span> <span class="n">manager</span> <span class="o">=</span> <span class="n">my_mock</span><span class="o">.</span><span class="n">return_value</span><span class="o">.</span><span class="n">__enter__</span><span class="o">.</span><span class="n">return_value</span> 1.547 +<span class="gp">... </span> <span class="n">manager</span><span class="o">.</span><span class="n">read</span><span class="o">.</span><span class="n">return_value</span> <span class="o">=</span> <span class="s">'some data'</span> 1.548 +<span class="gp">... </span> <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="s">'foo'</span><span class="p">)</span> <span class="k">as</span> <span class="n">h</span><span class="p">:</span> 1.549 +<span class="gp">... </span> <span class="n">data</span> <span class="o">=</span> <span class="n">h</span><span class="o">.</span><span class="n">read</span><span class="p">()</span> 1.550 +<span class="gp">...</span> 1.551 +<span class="gp">>>> </span><span class="n">data</span> 1.552 +<span class="go">'some data'</span> 1.553 +<span class="gp">>>> </span><span class="n">my_mock</span><span class="o">.</span><span class="n">assert_called_once_with</span><span class="p">(</span><span class="s">'foo'</span><span class="p">)</span> 1.554 +</pre></div> 1.555 +</div> 1.556 +<p><em>or</em>:</p> 1.557 +<div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="c"># mock</span> 1.558 +<span class="gp">>>> </span><span class="k">with</span> <span class="n">mock</span><span class="o">.</span><span class="n">patch</span><span class="p">(</span><span class="s">'__builtin__.open'</span><span class="p">)</span> <span class="k">as</span> <span class="n">my_mock</span><span class="p">:</span> 1.559 +<span class="gp">... </span> <span class="n">my_mock</span><span class="o">.</span><span class="n">return_value</span><span class="o">.</span><span class="n">__enter__</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">s</span><span class="p">:</span> <span class="n">s</span> 1.560 +<span class="gp">... </span> <span class="n">my_mock</span><span class="o">.</span><span class="n">return_value</span><span class="o">.</span><span class="n">__exit__</span> <span class="o">=</span> <span class="n">mock</span><span class="o">.</span><span class="n">Mock</span><span class="p">()</span> 1.561 +<span class="gp">... </span> <span class="n">my_mock</span><span class="o">.</span><span class="n">return_value</span><span class="o">.</span><span class="n">read</span><span class="o">.</span><span class="n">return_value</span> <span class="o">=</span> <span class="s">'some data'</span> 1.562 +<span class="gp">... </span> <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="s">'foo'</span><span class="p">)</span> <span class="k">as</span> <span class="n">h</span><span class="p">:</span> 1.563 +<span class="gp">... </span> <span class="n">data</span> <span class="o">=</span> <span class="n">h</span><span class="o">.</span><span class="n">read</span><span class="p">()</span> 1.564 +<span class="gp">...</span> 1.565 +<span class="gp">>>> </span><span class="n">data</span> 1.566 +<span class="go">'some data'</span> 1.567 +<span class="gp">>>> </span><span class="n">my_mock</span><span class="o">.</span><span class="n">assert_called_once_with</span><span class="p">(</span><span class="s">'foo'</span><span class="p">)</span> 1.568 +</pre></div> 1.569 +</div> 1.570 +<div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="c"># Dingus</span> 1.571 +<span class="gp">>>> </span><span class="n">my_dingus</span> <span class="o">=</span> <span class="n">dingus</span><span class="o">.</span><span class="n">Dingus</span><span class="p">()</span> 1.572 +<span class="gp">>>> </span><span class="k">with</span> <span class="n">dingus</span><span class="o">.</span><span class="n">patch</span><span class="p">(</span><span class="s">'__builtin__.open'</span><span class="p">,</span> <span class="n">my_dingus</span><span class="p">):</span> 1.573 +<span class="gp">... </span> <span class="n">file_</span> <span class="o">=</span> <span class="nb">open</span><span class="o">.</span><span class="n">return_value</span><span class="o">.</span><span class="n">__enter__</span><span class="o">.</span><span class="n">return_value</span> 1.574 +<span class="gp">... </span> <span class="n">file_</span><span class="o">.</span><span class="n">read</span><span class="o">.</span><span class="n">return_value</span> <span class="o">=</span> <span class="s">'some data'</span> 1.575 +<span class="gp">... </span> <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="s">'foo'</span><span class="p">)</span> <span class="k">as</span> <span class="n">h</span><span class="p">:</span> 1.576 +<span class="gp">... </span> <span class="n">data</span> <span class="o">=</span> <span class="n">f</span><span class="o">.</span><span class="n">read</span><span class="p">()</span> 1.577 +<span class="gp">...</span> 1.578 +<span class="gp">>>> </span><span class="n">data</span> 1.579 +<span class="go">'some data'</span> 1.580 +<span class="gp">>>> </span><span class="k">assert</span> <span class="n">my_dingus</span><span class="o">.</span><span class="n">calls</span><span class="p">(</span><span class="s">'()'</span><span class="p">,</span> <span class="s">'foo'</span><span class="p">)</span><span class="o">.</span><span class="n">once</span><span class="p">()</span> 1.581 +</pre></div> 1.582 +</div> 1.583 +<div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="c"># fudge</span> 1.584 +<span class="gp">>>> </span><span class="kn">from</span> <span class="nn">contextlib</span> <span class="kn">import</span> <span class="n">contextmanager</span> 1.585 +<span class="gp">>>> </span><span class="kn">from</span> <span class="nn">StringIO</span> <span class="kn">import</span> <span class="n">StringIO</span> 1.586 +<span class="gp">>>> </span><span class="nd">@contextmanager</span> 1.587 +<span class="gp">... </span><span class="k">def</span> <span class="nf">fake_file</span><span class="p">(</span><span class="n">filename</span><span class="p">):</span> 1.588 +<span class="gp">... </span> <span class="k">yield</span> <span class="n">StringIO</span><span class="p">(</span><span class="s">'sekrets'</span><span class="p">)</span> 1.589 +<span class="gp">...</span> 1.590 +<span class="gp">>>> </span><span class="k">with</span> <span class="n">fudge</span><span class="o">.</span><span class="n">patch</span><span class="p">(</span><span class="s">'__builtin__.open'</span><span class="p">)</span> <span class="k">as</span> <span class="n">fake_open</span><span class="p">:</span> 1.591 +<span class="gp">... </span> <span class="n">fake_open</span><span class="o">.</span><span class="n">is_callable</span><span class="p">()</span><span class="o">.</span><span class="n">calls</span><span class="p">(</span><span class="n">fake_file</span><span class="p">)</span> 1.592 +<span class="gp">... </span> <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="s">'/etc/password'</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span> 1.593 +<span class="gp">... </span> <span class="n">data</span> <span class="o">=</span> <span class="n">f</span><span class="o">.</span><span class="n">read</span><span class="p">()</span> 1.594 +<span class="gp">...</span> 1.595 +<span class="go">fake:__builtin__.open</span> 1.596 +<span class="gp">>>> </span><span class="n">data</span> 1.597 +<span class="go">'sekrets'</span> 1.598 +</pre></div> 1.599 +</div> 1.600 +</div> 1.601 +</div> 1.602 + 1.603 + 1.604 + </div> 1.605 + </div> 1.606 + </div> 1.607 + <div class="sphinxsidebar"> 1.608 + <div class="sphinxsidebarwrapper"> 1.609 + <h3><a href="index.html">Table Of Contents</a></h3> 1.610 + <ul> 1.611 +<li><a class="reference internal" href="#">Mock Library Comparison</a><ul> 1.612 +<li><a class="reference internal" href="#simple-fake-object">Simple fake object</a></li> 1.613 +<li><a class="reference internal" href="#simple-mock">Simple mock</a></li> 1.614 +<li><a class="reference internal" href="#creating-partial-mocks">Creating partial mocks</a></li> 1.615 +<li><a class="reference internal" href="#ensure-calls-are-made-in-specific-order">Ensure calls are made in specific order</a></li> 1.616 +<li><a class="reference internal" href="#raising-exceptions">Raising exceptions</a></li> 1.617 +<li><a class="reference internal" href="#override-new-instances-of-a-class">Override new instances of a class</a></li> 1.618 +<li><a class="reference internal" href="#call-the-same-method-multiple-times">Call the same method multiple times</a></li> 1.619 +<li><a class="reference internal" href="#mock-chained-methods">Mock chained methods</a></li> 1.620 +<li><a class="reference internal" href="#mocking-a-context-manager">Mocking a context manager</a></li> 1.621 +<li><a class="reference internal" href="#mocking-the-builtin-open-used-as-a-context-manager">Mocking the builtin open used as a context manager</a></li> 1.622 +</ul> 1.623 +</li> 1.624 +</ul> 1.625 + 1.626 + <h4>Previous topic</h4> 1.627 + <p class="topless"><a href="examples.html" 1.628 + title="previous chapter">Further Examples</a></p> 1.629 + <h4>Next topic</h4> 1.630 + <p class="topless"><a href="changelog.html" 1.631 + title="next chapter">CHANGELOG</a></p> 1.632 + <h3>This Page</h3> 1.633 + <ul class="this-page-menu"> 1.634 + <li><a href="_sources/compare.txt" 1.635 + rel="nofollow">Show Source</a></li> 1.636 + </ul> 1.637 +<div id="searchbox" style="display: none"> 1.638 + <h3>Quick search</h3> 1.639 + <form class="search" action="search.html" method="get"> 1.640 + <input type="text" name="q" /> 1.641 + <input type="submit" value="Go" /> 1.642 + <input type="hidden" name="check_keywords" value="yes" /> 1.643 + <input type="hidden" name="area" value="default" /> 1.644 + </form> 1.645 + <p class="searchtip" style="font-size: 90%"> 1.646 + Enter search terms or a module, class or function name. 1.647 + </p> 1.648 +</div> 1.649 +<script type="text/javascript">$('#searchbox').show(0);</script> 1.650 + </div> 1.651 + </div> 1.652 + <div class="clearer"></div> 1.653 + </div> 1.654 + <div class="related"> 1.655 + <h3>Navigation</h3> 1.656 + <ul> 1.657 + <li class="right" style="margin-right: 10px"> 1.658 + <a href="genindex.html" title="General Index" 1.659 + >index</a></li> 1.660 + <li class="right" > 1.661 + <a href="changelog.html" title="CHANGELOG" 1.662 + >next</a> |</li> 1.663 + <li class="right" > 1.664 + <a href="examples.html" title="Further Examples" 1.665 + >previous</a> |</li> 1.666 + <li><a href="index.html">Mock 1.0.0 documentation</a> »</li> 1.667 + </ul> 1.668 + </div> 1.669 + <div class="footer"> 1.670 + © Copyright 2007-2012, Michael Foord & the mock team. 1.671 + Last updated on Oct 07, 2012. 1.672 + Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.1.3. 1.673 + </div> 1.674 + </body> 1.675 +</html> 1.676 \ No newline at end of file