python/mock-1.0.0/html/compare.html

changeset 0
6474c204b198
     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 &mdash; 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> &raquo;</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&#8217;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">&gt;&gt;&gt; </span><span class="c"># mock</span>
   1.104 +<span class="gp">&gt;&gt;&gt; </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">&gt;&gt;&gt; </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">&quot;calculated value&quot;</span>
   1.106 +<span class="gp">&gt;&gt;&gt; </span><span class="n">my_mock</span><span class="o">.</span><span class="n">some_attribute</span> <span class="o">=</span> <span class="s">&quot;value&quot;</span>
   1.107 +<span class="gp">&gt;&gt;&gt; </span><span class="n">assertEqual</span><span class="p">(</span><span class="s">&quot;calculated value&quot;</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">&gt;&gt;&gt; </span><span class="n">assertEqual</span><span class="p">(</span><span class="s">&quot;value&quot;</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">&quot;calculated value&quot;</span><span class="p">,</span> <span class="n">some_attribute</span><span class="o">=</span><span class="s">&quot;value&quot;</span><span class="p">)</span>
   1.113 +<span class="n">assertEqual</span><span class="p">(</span><span class="s">&quot;calculated value&quot;</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">&quot;value&quot;</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">&quot;calculated value&quot;</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">&quot;value&quot;</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">&quot;calculated value&quot;</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">&quot;value&quot;</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">&quot;calculated value&quot;</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">&quot;value&quot;</span>
   1.130 +<span class="n">assertEqual</span><span class="p">(</span><span class="s">&quot;calculated value&quot;</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">&quot;value&quot;</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">&gt;&gt;&gt; </span><span class="c"># Dingus</span>
   1.135 +<span class="gp">&gt;&gt;&gt; </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">&quot;value&quot;</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">&quot;calculated value&quot;</span><span class="p">)</span>
   1.137 +<span class="gp">&gt;&gt;&gt; </span><span class="n">assertEqual</span><span class="p">(</span><span class="s">&quot;calculated value&quot;</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">&gt;&gt;&gt; </span><span class="n">assertEqual</span><span class="p">(</span><span class="s">&quot;value&quot;</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">&gt;&gt;&gt; </span><span class="c"># fudge</span>
   1.142 +<span class="gp">&gt;&gt;&gt; </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">&#39;some_method&#39;</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">&quot;calculated value&quot;</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">&quot;value&quot;</span><span class="p">))</span>
   1.146 +<span class="gp">...</span>
   1.147 +<span class="gp">&gt;&gt;&gt; </span><span class="n">assertEqual</span><span class="p">(</span><span class="s">&quot;calculated value&quot;</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">&gt;&gt;&gt; </span><span class="n">assertEqual</span><span class="p">(</span><span class="s">&quot;value&quot;</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">&gt;&gt;&gt; </span><span class="c"># mock</span>
   1.155 +<span class="gp">&gt;&gt;&gt; </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">&gt;&gt;&gt; </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">&quot;value&quot;</span>
   1.157 +<span class="gp">&gt;&gt;&gt; </span><span class="n">assertEqual</span><span class="p">(</span><span class="s">&quot;value&quot;</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">&gt;&gt;&gt; </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">&quot;some_method&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">and_return</span><span class="p">(</span><span class="s">&quot;value&quot;</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">&quot;value&quot;</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">&quot;value&quot;</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">&quot;value&quot;</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">&quot;value&quot;</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">&quot;value&quot;</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">&gt;&gt;&gt; </span><span class="c"># Dingus</span>
   1.183 +<span class="gp">&gt;&gt;&gt; </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">&quot;value&quot;</span><span class="p">)</span>
   1.184 +<span class="gp">&gt;&gt;&gt; </span><span class="n">assertEqual</span><span class="p">(</span><span class="s">&quot;value&quot;</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">&gt;&gt;&gt; </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">&gt;&gt;&gt; </span><span class="c"># fudge</span>
   1.189 +<span class="gp">&gt;&gt;&gt; </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">&#39;some_method&#39;</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">&quot;value&quot;</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">&gt;&gt;&gt; </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">&gt;&gt;&gt; </span><span class="c"># mock</span>
   1.206 +<span class="gp">&gt;&gt;&gt; </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">&#39;value&#39;</span><span class="p">)</span>
   1.207 +<span class="gp">&gt;&gt;&gt; </span><span class="n">assertEqual</span><span class="p">(</span><span class="s">&quot;value&quot;</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">&quot;some_method&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">and_return</span><span class="p">(</span><span class="s">&#39;value&#39;</span><span class="p">)</span>
   1.212 +<span class="n">assertEqual</span><span class="p">(</span><span class="s">&quot;value&quot;</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">&quot;value&quot;</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">&quot;value&quot;</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">&quot;value&quot;</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">&quot;value&quot;</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">&gt;&gt;&gt; </span><span class="c"># Dingus</span>
   1.231 +<span class="gp">&gt;&gt;&gt; </span><span class="nb">object</span> <span class="o">=</span> <span class="n">SomeObject</span>
   1.232 +<span class="gp">&gt;&gt;&gt; </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">&quot;value&quot;</span><span class="p">)</span>
   1.233 +<span class="gp">&gt;&gt;&gt; </span><span class="n">assertEqual</span><span class="p">(</span><span class="s">&quot;value&quot;</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">&gt;&gt;&gt; </span><span class="c"># fudge</span>
   1.237 +<span class="gp">&gt;&gt;&gt; </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">&quot;&lt;fudge-value&gt;&quot;</span><span class="p">)</span>
   1.238 +<span class="gp">&gt;&gt;&gt; </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">&#39;some_method&#39;</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">&quot;&lt;fudge-value&gt;&quot;</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">&gt;&gt;&gt; </span><span class="c"># mock</span>
   1.248 +<span class="gp">&gt;&gt;&gt; </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">&gt;&gt;&gt; </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">&lt;Mock name=&#39;mock.method1()&#39; id=&#39;...&#39;&gt;</span>
   1.251 +<span class="gp">&gt;&gt;&gt; </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">&lt;Mock name=&#39;mock.method2()&#39; id=&#39;...&#39;&gt;</span>
   1.253 +<span class="gp">&gt;&gt;&gt; </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">&#39;method1&#39;</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">&#39;first thing&#39;</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">&#39;method2&#39;</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">&#39;second thing&#39;</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">&#39;first thing&#39;</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">&#39;second thing&#39;</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">&#39;first thing&#39;</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">&#39;second thing&#39;</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">&gt;&gt;&gt; </span><span class="c"># Dingus</span>
   1.280 +<span class="gp">&gt;&gt;&gt; </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">&gt;&gt;&gt; </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">&lt;Dingus ...&gt;</span>
   1.283 +<span class="gp">&gt;&gt;&gt; </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">&lt;Dingus ...&gt;</span>
   1.285 +<span class="gp">&gt;&gt;&gt; </span><span class="n">assertEqual</span><span class="p">([</span><span class="s">&#39;method1&#39;</span><span class="p">,</span> <span class="s">&#39;method2&#39;</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">&gt;&gt;&gt; </span><span class="c"># fudge</span>
   1.289 +<span class="gp">&gt;&gt;&gt; </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">&#39;method1&#39;</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">&#39;method2&#39;</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">&gt;&gt;&gt; </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">&gt;&gt;&gt; </span><span class="c"># mock</span>
   1.308 +<span class="gp">&gt;&gt;&gt; </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">&gt;&gt;&gt; </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">&quot;message&quot;</span><span class="p">)</span>
   1.310 +<span class="gp">&gt;&gt;&gt; </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">&quot;some_method&quot;</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">&quot;message&quot;</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">&quot;message&quot;</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">&quot;message&quot;</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">&gt;&gt;&gt; </span><span class="c"># Dingus</span>
   1.335 +<span class="gp">&gt;&gt;&gt; </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">&gt;&gt;&gt; </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">&gt;&gt;&gt; </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">&gt;&gt;&gt; </span><span class="c"># fudge</span>
   1.341 +<span class="gp">&gt;&gt;&gt; </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">&quot;message&quot;</span><span class="p">)))</span>
   1.344 +<span class="gp">...</span>
   1.345 +<span class="gp">&gt;&gt;&gt; </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">&gt;&gt;&gt; </span><span class="c"># mock</span>
   1.355 +<span class="gp">&gt;&gt;&gt; </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">&#39;somemodule.Someclass&#39;</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">&#39;SomeClass&#39;</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">&#39;expected&#39;</span><span class="p">,</span> <span class="s">&#39;args&#39;</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">&gt;&gt;&gt; </span><span class="c"># Dingus</span>
   1.380 +<span class="gp">&gt;&gt;&gt; </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">&gt;&gt;&gt; </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">&#39;somemodule.SomeClass&#39;</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">&gt;&gt;&gt; </span><span class="c"># fudge</span>
   1.387 +<span class="gp">&gt;&gt;&gt; </span><span class="nd">@fudge.patch</span><span class="p">(</span><span class="s">&#39;somemodule.SomeClass&#39;</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">&gt;&gt;&gt; </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&#8217;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">&gt;&gt;&gt; </span><span class="c"># mock</span>
   1.406 +<span class="gp">&gt;&gt;&gt; </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">&gt;&gt;&gt; </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">&lt;Mock name=&#39;mock.some_method()&#39; id=&#39;...&#39;&gt;</span>
   1.409 +<span class="gp">&gt;&gt;&gt; </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">&lt;Mock name=&#39;mock.some_method()&#39; id=&#39;...&#39;&gt;</span>
   1.411 +<span class="gp">&gt;&gt;&gt; </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">&gt;=</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">&#39;some_method&#39;</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">&gt;&gt;&gt; </span><span class="c"># Dingus</span>
   1.430 +<span class="gp">&gt;&gt;&gt; </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">&gt;&gt;&gt; </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">&lt;Dingus ...&gt;</span>
   1.433 +<span class="gp">&gt;&gt;&gt; </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">&lt;Dingus ...&gt;</span>
   1.435 +<span class="gp">&gt;&gt;&gt; </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">&#39;some_method&#39;</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">&gt;&gt;&gt; </span><span class="c"># fudge</span>
   1.439 +<span class="gp">&gt;&gt;&gt; </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">&#39;some_method&#39;</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">&gt;&gt;&gt; </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">&gt;&gt;&gt; </span><span class="c"># mock</span>
   1.454 +<span class="gp">&gt;&gt;&gt; </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">&gt;&gt;&gt; </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">&gt;&gt;&gt; </span><span class="n">method3</span><span class="o">.</span><span class="n">return_value</span> <span class="o">=</span> <span class="s">&#39;some value&#39;</span>
   1.457 +<span class="gp">&gt;&gt;&gt; </span><span class="n">assertEqual</span><span class="p">(</span><span class="s">&#39;some value&#39;</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">&gt;&gt;&gt; </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">&#39;method1.method2.method3&#39;</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">&#39;some value&#39;</span><span class="p">)</span>
   1.467 +<span class="n">assertEqual</span><span class="p">(</span><span class="s">&#39;some_value&#39;</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">&#39;some_value&#39;</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">&quot;some_value&quot;</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">&gt;&gt;&gt; </span><span class="c"># Dingus</span>
   1.486 +<span class="gp">&gt;&gt;&gt; </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">&gt;&gt;&gt; </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">&gt;&gt;&gt; </span><span class="n">method3</span><span class="o">.</span><span class="n">return_value</span> <span class="o">=</span> <span class="s">&#39;some value&#39;</span>
   1.489 +<span class="gp">&gt;&gt;&gt; </span><span class="n">assertEqual</span><span class="p">(</span><span class="s">&#39;some value&#39;</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">&gt;&gt;&gt; </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">&#39;()&#39;</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">&gt;&gt;&gt; </span><span class="c"># fudge</span>
   1.494 +<span class="gp">&gt;&gt;&gt; </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">&#39;method1&#39;</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">&#39;method2&#39;</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">&#39;method3&#39;</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">&#39;some value&#39;</span><span class="p">))</span>
   1.505 +<span class="gp">... </span>    <span class="n">assertEqual</span><span class="p">(</span><span class="s">&#39;some value&#39;</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">&gt;&gt;&gt; </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">&gt;&gt;&gt; </span><span class="c"># mock</span>
   1.515 +<span class="gp">&gt;&gt;&gt; </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">&gt;&gt;&gt; </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">&gt;&gt;&gt; </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">&gt;&gt;&gt; </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">&gt;&gt;&gt; </span><span class="c"># Dingus (nothing special here; all dinguses are &quot;magic mocks&quot;)</span>
   1.524 +<span class="gp">&gt;&gt;&gt; </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">&gt;&gt;&gt; </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">&gt;&gt;&gt; </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">&gt;&gt;&gt; </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">&#39;()&#39;</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">&gt;&gt;&gt; </span><span class="c"># fudge</span>
   1.533 +<span class="gp">&gt;&gt;&gt; </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">&#39;__enter__&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">provides</span><span class="p">(</span><span class="s">&#39;__exit__&#39;</span><span class="p">)</span>
   1.534 +<span class="gp">&gt;&gt;&gt; </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">&gt;&gt;&gt; </span><span class="c"># mock</span>
   1.544 +<span class="gp">&gt;&gt;&gt; </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">&gt;&gt;&gt; </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">&#39;__builtin__.open&#39;</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">&#39;some data&#39;</span>
   1.548 +<span class="gp">... </span>    <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="s">&#39;foo&#39;</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">&gt;&gt;&gt; </span><span class="n">data</span>
   1.552 +<span class="go">&#39;some data&#39;</span>
   1.553 +<span class="gp">&gt;&gt;&gt; </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">&#39;foo&#39;</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">&gt;&gt;&gt; </span><span class="c"># mock</span>
   1.558 +<span class="gp">&gt;&gt;&gt; </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">&#39;__builtin__.open&#39;</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">&#39;some data&#39;</span>
   1.562 +<span class="gp">... </span>    <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="s">&#39;foo&#39;</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">&gt;&gt;&gt; </span><span class="n">data</span>
   1.566 +<span class="go">&#39;some data&#39;</span>
   1.567 +<span class="gp">&gt;&gt;&gt; </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">&#39;foo&#39;</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">&gt;&gt;&gt; </span><span class="c"># Dingus</span>
   1.571 +<span class="gp">&gt;&gt;&gt; </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">&gt;&gt;&gt; </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">&#39;__builtin__.open&#39;</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">&#39;some data&#39;</span>
   1.575 +<span class="gp">... </span>    <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="s">&#39;foo&#39;</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">&gt;&gt;&gt; </span><span class="n">data</span>
   1.579 +<span class="go">&#39;some data&#39;</span>
   1.580 +<span class="gp">&gt;&gt;&gt; </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">&#39;()&#39;</span><span class="p">,</span> <span class="s">&#39;foo&#39;</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">&gt;&gt;&gt; </span><span class="c"># fudge</span>
   1.584 +<span class="gp">&gt;&gt;&gt; </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">&gt;&gt;&gt; </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">&gt;&gt;&gt; </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">&#39;sekrets&#39;</span><span class="p">)</span>
   1.589 +<span class="gp">...</span>
   1.590 +<span class="gp">&gt;&gt;&gt; </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">&#39;__builtin__.open&#39;</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">&#39;/etc/password&#39;</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">&gt;&gt;&gt; </span><span class="n">data</span>
   1.597 +<span class="go">&#39;sekrets&#39;</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> &raquo;</li> 
   1.667 +      </ul>
   1.668 +    </div>
   1.669 +    <div class="footer">
   1.670 +        &copy; Copyright 2007-2012, Michael Foord &amp; 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

mercurial