python/mock-1.0.0/html/getting-started.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/getting-started.html	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,510 @@
     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>Getting Started with Mock &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="Further Examples" href="examples.html" />
    1.32 +    <link rel="prev" title="Mocking Magic Methods" href="magicmock.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="examples.html" title="Further Examples"
    1.43 +             accesskey="N">next</a> |</li>
    1.44 +        <li class="right" >
    1.45 +          <a href="magicmock.html" title="Mocking Magic Methods"
    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="getting-started-with-mock">
    1.57 +<h1>Getting Started with Mock<a class="headerlink" href="#getting-started-with-mock" title="Permalink to this headline">¶</a></h1>
    1.58 +<span class="target" id="getting-started"></span><span class="target" id="index-0"></span><div class="section" id="using-mock">
    1.59 +<h2>Using Mock<a class="headerlink" href="#using-mock" title="Permalink to this headline">¶</a></h2>
    1.60 +<div class="section" id="mock-patching-methods">
    1.61 +<h3>Mock Patching Methods<a class="headerlink" href="#mock-patching-methods" title="Permalink to this headline">¶</a></h3>
    1.62 +<p>Common uses for <tt class="xref py py-class docutils literal"><span class="pre">Mock</span></tt> objects include:</p>
    1.63 +<ul class="simple">
    1.64 +<li>Patching methods</li>
    1.65 +<li>Recording method calls on objects</li>
    1.66 +</ul>
    1.67 +<p>You might want to replace a method on an object to check that
    1.68 +it is called with the correct arguments by another part of the system:</p>
    1.69 +<div class="highlight-python"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="n">real</span> <span class="o">=</span> <span class="n">SomeClass</span><span class="p">()</span>
    1.70 +<span class="gp">&gt;&gt;&gt; </span><span class="n">real</span><span class="o">.</span><span class="n">method</span> <span class="o">=</span> <span class="n">MagicMock</span><span class="p">(</span><span class="n">name</span><span class="o">=</span><span class="s">&#39;method&#39;</span><span class="p">)</span>
    1.71 +<span class="gp">&gt;&gt;&gt; </span><span class="n">real</span><span class="o">.</span><span class="n">method</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">5</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s">&#39;value&#39;</span><span class="p">)</span>
    1.72 +<span class="go">&lt;MagicMock name=&#39;method()&#39; id=&#39;...&#39;&gt;</span>
    1.73 +</pre></div>
    1.74 +</div>
    1.75 +<p>Once our mock has been used (<cite>real.method</cite> in this example) it has methods
    1.76 +and attributes that allow you to make assertions about how it has been used.</p>
    1.77 +<div class="admonition note">
    1.78 +<p class="first admonition-title">Note</p>
    1.79 +<p class="last">In most of these examples the <tt class="xref py py-class docutils literal"><span class="pre">Mock</span></tt> and <tt class="xref py py-class docutils literal"><span class="pre">MagicMock</span></tt> classes
    1.80 +are interchangeable. As the <cite>MagicMock</cite> is the more capable class it makes
    1.81 +a sensible one to use by default.</p>
    1.82 +</div>
    1.83 +<p>Once the mock has been called its <tt class="xref py py-attr docutils literal"><span class="pre">called</span></tt> attribute is set to
    1.84 +<cite>True</cite>. More importantly we can use the <tt class="xref py py-meth docutils literal"><span class="pre">assert_called_with()</span></tt> or
    1.85 +<tt class="xref py py-meth docutils literal"><span class="pre">assert_called_once_with()</span></tt> method to check that it was called with
    1.86 +the correct arguments.</p>
    1.87 +<p>This example tests that calling <cite>ProductionClass().method</cite> results in a call to
    1.88 +the <cite>something</cite> method:</p>
    1.89 +<div class="highlight-python"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">mock</span> <span class="kn">import</span> <span class="n">MagicMock</span>
    1.90 +<span class="gp">&gt;&gt;&gt; </span><span class="k">class</span> <span class="nc">ProductionClass</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
    1.91 +<span class="gp">... </span>    <span class="k">def</span> <span class="nf">method</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
    1.92 +<span class="gp">... </span>        <span class="bp">self</span><span class="o">.</span><span class="n">something</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="mi">3</span><span class="p">)</span>
    1.93 +<span class="gp">... </span>    <span class="k">def</span> <span class="nf">something</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="n">c</span><span class="p">):</span>
    1.94 +<span class="gp">... </span>        <span class="k">pass</span>
    1.95 +<span class="gp">...</span>
    1.96 +<span class="gp">&gt;&gt;&gt; </span><span class="n">real</span> <span class="o">=</span> <span class="n">ProductionClass</span><span class="p">()</span>
    1.97 +<span class="gp">&gt;&gt;&gt; </span><span class="n">real</span><span class="o">.</span><span class="n">something</span> <span class="o">=</span> <span class="n">MagicMock</span><span class="p">()</span>
    1.98 +<span class="gp">&gt;&gt;&gt; </span><span class="n">real</span><span class="o">.</span><span class="n">method</span><span class="p">()</span>
    1.99 +<span class="gp">&gt;&gt;&gt; </span><span class="n">real</span><span class="o">.</span><span class="n">something</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> <span class="mi">3</span><span class="p">)</span>
   1.100 +</pre></div>
   1.101 +</div>
   1.102 +</div>
   1.103 +<div class="section" id="mock-for-method-calls-on-an-object">
   1.104 +<h3>Mock for Method Calls on an Object<a class="headerlink" href="#mock-for-method-calls-on-an-object" title="Permalink to this headline">¶</a></h3>
   1.105 +<p>In the last example we patched a method directly on an object to check that it
   1.106 +was called correctly. Another common use case is to pass an object into a
   1.107 +method (or some part of the system under test) and then check that it is used
   1.108 +in the correct way.</p>
   1.109 +<p>The simple <cite>ProductionClass</cite> below has a <cite>closer</cite> method. If it is called with
   1.110 +an object then it calls <cite>close</cite> on it.</p>
   1.111 +<div class="highlight-python"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="k">class</span> <span class="nc">ProductionClass</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
   1.112 +<span class="gp">... </span>    <span class="k">def</span> <span class="nf">closer</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">something</span><span class="p">):</span>
   1.113 +<span class="gp">... </span>        <span class="n">something</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
   1.114 +<span class="gp">...</span>
   1.115 +</pre></div>
   1.116 +</div>
   1.117 +<p>So to test it we need to pass in an object with a <cite>close</cite> method and check
   1.118 +that it was called correctly.</p>
   1.119 +<div class="highlight-python"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="n">real</span> <span class="o">=</span> <span class="n">ProductionClass</span><span class="p">()</span>
   1.120 +<span class="gp">&gt;&gt;&gt; </span><span class="n">mock</span> <span class="o">=</span> <span class="n">Mock</span><span class="p">()</span>
   1.121 +<span class="gp">&gt;&gt;&gt; </span><span class="n">real</span><span class="o">.</span><span class="n">closer</span><span class="p">(</span><span class="n">mock</span><span class="p">)</span>
   1.122 +<span class="gp">&gt;&gt;&gt; </span><span class="n">mock</span><span class="o">.</span><span class="n">close</span><span class="o">.</span><span class="n">assert_called_with</span><span class="p">()</span>
   1.123 +</pre></div>
   1.124 +</div>
   1.125 +<p>We don&#8217;t have to do any work to provide the &#8216;close&#8217; method on our mock.
   1.126 +Accessing close creates it. So, if &#8216;close&#8217; hasn&#8217;t already been called then
   1.127 +accessing it in the test will create it, but <tt class="xref py py-meth docutils literal"><span class="pre">assert_called_with()</span></tt>
   1.128 +will raise a failure exception.</p>
   1.129 +</div>
   1.130 +<div class="section" id="mocking-classes">
   1.131 +<h3>Mocking Classes<a class="headerlink" href="#mocking-classes" title="Permalink to this headline">¶</a></h3>
   1.132 +<p>A common use case is to mock out classes instantiated by your code under test.
   1.133 +When you patch a class, then that class is replaced with a mock. Instances
   1.134 +are created by <em>calling the class</em>. This means you access the &#8220;mock instance&#8221;
   1.135 +by looking at the return value of the mocked class.</p>
   1.136 +<p>In the example below we have a function <cite>some_function</cite> that instantiates <cite>Foo</cite>
   1.137 +and calls a method on it. The call to <cite>patch</cite> replaces the class <cite>Foo</cite> with a
   1.138 +mock. The <cite>Foo</cite> instance is the result of calling the mock, so it is configured
   1.139 +by modifying the mock <tt class="xref py py-attr docutils literal"><span class="pre">return_value</span></tt>.</p>
   1.140 +<div class="highlight-python"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="k">def</span> <span class="nf">some_function</span><span class="p">():</span>
   1.141 +<span class="gp">... </span>    <span class="n">instance</span> <span class="o">=</span> <span class="n">module</span><span class="o">.</span><span class="n">Foo</span><span class="p">()</span>
   1.142 +<span class="gp">... </span>    <span class="k">return</span> <span class="n">instance</span><span class="o">.</span><span class="n">method</span><span class="p">()</span>
   1.143 +<span class="gp">...</span>
   1.144 +<span class="gp">&gt;&gt;&gt; </span><span class="k">with</span> <span class="n">patch</span><span class="p">(</span><span class="s">&#39;module.Foo&#39;</span><span class="p">)</span> <span class="k">as</span> <span class="n">mock</span><span class="p">:</span>
   1.145 +<span class="gp">... </span>    <span class="n">instance</span> <span class="o">=</span> <span class="n">mock</span><span class="o">.</span><span class="n">return_value</span>
   1.146 +<span class="gp">... </span>    <span class="n">instance</span><span class="o">.</span><span class="n">method</span><span class="o">.</span><span class="n">return_value</span> <span class="o">=</span> <span class="s">&#39;the result&#39;</span>
   1.147 +<span class="gp">... </span>    <span class="n">result</span> <span class="o">=</span> <span class="n">some_function</span><span class="p">()</span>
   1.148 +<span class="gp">... </span>    <span class="k">assert</span> <span class="n">result</span> <span class="o">==</span> <span class="s">&#39;the result&#39;</span>
   1.149 +</pre></div>
   1.150 +</div>
   1.151 +</div>
   1.152 +<div class="section" id="naming-your-mocks">
   1.153 +<h3>Naming your mocks<a class="headerlink" href="#naming-your-mocks" title="Permalink to this headline">¶</a></h3>
   1.154 +<p>It can be useful to give your mocks a name. The name is shown in the repr of
   1.155 +the mock and can be helpful when the mock appears in test failure messages. The
   1.156 +name is also propagated to attributes or methods of the mock:</p>
   1.157 +<div class="highlight-python"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="n">mock</span> <span class="o">=</span> <span class="n">MagicMock</span><span class="p">(</span><span class="n">name</span><span class="o">=</span><span class="s">&#39;foo&#39;</span><span class="p">)</span>
   1.158 +<span class="gp">&gt;&gt;&gt; </span><span class="n">mock</span>
   1.159 +<span class="go">&lt;MagicMock name=&#39;foo&#39; id=&#39;...&#39;&gt;</span>
   1.160 +<span class="gp">&gt;&gt;&gt; </span><span class="n">mock</span><span class="o">.</span><span class="n">method</span>
   1.161 +<span class="go">&lt;MagicMock name=&#39;foo.method&#39; id=&#39;...&#39;&gt;</span>
   1.162 +</pre></div>
   1.163 +</div>
   1.164 +</div>
   1.165 +<div class="section" id="tracking-all-calls">
   1.166 +<h3>Tracking all Calls<a class="headerlink" href="#tracking-all-calls" title="Permalink to this headline">¶</a></h3>
   1.167 +<p>Often you want to track more than a single call to a method. The
   1.168 +<tt class="xref py py-attr docutils literal"><span class="pre">mock_calls</span></tt> attribute records all calls
   1.169 +to child attributes of the mock - and also to their children.</p>
   1.170 +<div class="highlight-python"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="n">mock</span> <span class="o">=</span> <span class="n">MagicMock</span><span class="p">()</span>
   1.171 +<span class="gp">&gt;&gt;&gt; </span><span class="n">mock</span><span class="o">.</span><span class="n">method</span><span class="p">()</span>
   1.172 +<span class="go">&lt;MagicMock name=&#39;mock.method()&#39; id=&#39;...&#39;&gt;</span>
   1.173 +<span class="gp">&gt;&gt;&gt; </span><span class="n">mock</span><span class="o">.</span><span class="n">attribute</span><span class="o">.</span><span class="n">method</span><span class="p">(</span><span class="mi">10</span><span class="p">,</span> <span class="n">x</span><span class="o">=</span><span class="mi">53</span><span class="p">)</span>
   1.174 +<span class="go">&lt;MagicMock name=&#39;mock.attribute.method()&#39; id=&#39;...&#39;&gt;</span>
   1.175 +<span class="gp">&gt;&gt;&gt; </span><span class="n">mock</span><span class="o">.</span><span class="n">mock_calls</span>
   1.176 +<span class="go">[call.method(), call.attribute.method(10, x=53)]</span>
   1.177 +</pre></div>
   1.178 +</div>
   1.179 +<p>If you make an assertion about <cite>mock_calls</cite> and any unexpected methods
   1.180 +have been called, then the assertion will fail. This is useful because as well
   1.181 +as asserting that the calls you expected have been made, you are also checking
   1.182 +that they were made in the right order and with no additional calls:</p>
   1.183 +<p>You use the <tt class="xref py py-data docutils literal"><span class="pre">call</span></tt> object to construct lists for comparing with
   1.184 +<cite>mock_calls</cite>:</p>
   1.185 +<div class="highlight-python"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="n">expected</span> <span class="o">=</span> <span class="p">[</span><span class="n">call</span><span class="o">.</span><span class="n">method</span><span class="p">(),</span> <span class="n">call</span><span class="o">.</span><span class="n">attribute</span><span class="o">.</span><span class="n">method</span><span class="p">(</span><span class="mi">10</span><span class="p">,</span> <span class="n">x</span><span class="o">=</span><span class="mi">53</span><span class="p">)]</span>
   1.186 +<span class="gp">&gt;&gt;&gt; </span><span class="n">mock</span><span class="o">.</span><span class="n">mock_calls</span> <span class="o">==</span> <span class="n">expected</span>
   1.187 +<span class="go">True</span>
   1.188 +</pre></div>
   1.189 +</div>
   1.190 +</div>
   1.191 +<div class="section" id="setting-return-values-and-attributes">
   1.192 +<h3>Setting Return Values and Attributes<a class="headerlink" href="#setting-return-values-and-attributes" title="Permalink to this headline">¶</a></h3>
   1.193 +<p>Setting the return values on a mock object is trivially easy:</p>
   1.194 +<div class="highlight-python"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="n">mock</span> <span class="o">=</span> <span class="n">Mock</span><span class="p">()</span>
   1.195 +<span class="gp">&gt;&gt;&gt; </span><span class="n">mock</span><span class="o">.</span><span class="n">return_value</span> <span class="o">=</span> <span class="mi">3</span>
   1.196 +<span class="gp">&gt;&gt;&gt; </span><span class="n">mock</span><span class="p">()</span>
   1.197 +<span class="go">3</span>
   1.198 +</pre></div>
   1.199 +</div>
   1.200 +<p>Of course you can do the same for methods on the mock:</p>
   1.201 +<div class="highlight-python"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="n">mock</span> <span class="o">=</span> <span class="n">Mock</span><span class="p">()</span>
   1.202 +<span class="gp">&gt;&gt;&gt; </span><span class="n">mock</span><span class="o">.</span><span class="n">method</span><span class="o">.</span><span class="n">return_value</span> <span class="o">=</span> <span class="mi">3</span>
   1.203 +<span class="gp">&gt;&gt;&gt; </span><span class="n">mock</span><span class="o">.</span><span class="n">method</span><span class="p">()</span>
   1.204 +<span class="go">3</span>
   1.205 +</pre></div>
   1.206 +</div>
   1.207 +<p>The return value can also be set in the constructor:</p>
   1.208 +<div class="highlight-python"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </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="mi">3</span><span class="p">)</span>
   1.209 +<span class="gp">&gt;&gt;&gt; </span><span class="n">mock</span><span class="p">()</span>
   1.210 +<span class="go">3</span>
   1.211 +</pre></div>
   1.212 +</div>
   1.213 +<p>If you need an attribute setting on your mock, just do it:</p>
   1.214 +<div class="highlight-python"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="n">mock</span> <span class="o">=</span> <span class="n">Mock</span><span class="p">()</span>
   1.215 +<span class="gp">&gt;&gt;&gt; </span><span class="n">mock</span><span class="o">.</span><span class="n">x</span> <span class="o">=</span> <span class="mi">3</span>
   1.216 +<span class="gp">&gt;&gt;&gt; </span><span class="n">mock</span><span class="o">.</span><span class="n">x</span>
   1.217 +<span class="go">3</span>
   1.218 +</pre></div>
   1.219 +</div>
   1.220 +<p>Sometimes you want to mock up a more complex situation, like for example
   1.221 +<cite>mock.connection.cursor().execute(&#8220;SELECT 1&#8221;)</cite>. If we wanted this call to
   1.222 +return a list, then we have to configure the result of the nested call.</p>
   1.223 +<p>We can use <tt class="xref py py-data docutils literal"><span class="pre">call</span></tt> to construct the set of calls in a &#8220;chained call&#8221; like
   1.224 +this for easy assertion afterwards:</p>
   1.225 +<div class="highlight-python"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="n">mock</span> <span class="o">=</span> <span class="n">Mock</span><span class="p">()</span>
   1.226 +<span class="gp">&gt;&gt;&gt; </span><span class="n">cursor</span> <span class="o">=</span> <span class="n">mock</span><span class="o">.</span><span class="n">connection</span><span class="o">.</span><span class="n">cursor</span><span class="o">.</span><span class="n">return_value</span>
   1.227 +<span class="gp">&gt;&gt;&gt; </span><span class="n">cursor</span><span class="o">.</span><span class="n">execute</span><span class="o">.</span><span class="n">return_value</span> <span class="o">=</span> <span class="p">[</span><span class="s">&#39;foo&#39;</span><span class="p">]</span>
   1.228 +<span class="gp">&gt;&gt;&gt; </span><span class="n">mock</span><span class="o">.</span><span class="n">connection</span><span class="o">.</span><span class="n">cursor</span><span class="p">()</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s">&quot;SELECT 1&quot;</span><span class="p">)</span>
   1.229 +<span class="go">[&#39;foo&#39;]</span>
   1.230 +<span class="gp">&gt;&gt;&gt; </span><span class="n">expected</span> <span class="o">=</span> <span class="n">call</span><span class="o">.</span><span class="n">connection</span><span class="o">.</span><span class="n">cursor</span><span class="p">()</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s">&quot;SELECT 1&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">call_list</span><span class="p">()</span>
   1.231 +<span class="gp">&gt;&gt;&gt; </span><span class="n">mock</span><span class="o">.</span><span class="n">mock_calls</span>
   1.232 +<span class="go">[call.connection.cursor(), call.connection.cursor().execute(&#39;SELECT 1&#39;)]</span>
   1.233 +<span class="gp">&gt;&gt;&gt; </span><span class="n">mock</span><span class="o">.</span><span class="n">mock_calls</span> <span class="o">==</span> <span class="n">expected</span>
   1.234 +<span class="go">True</span>
   1.235 +</pre></div>
   1.236 +</div>
   1.237 +<p>It is the call to <cite>.call_list()</cite> that turns our call object into a list of
   1.238 +calls representing the chained calls.</p>
   1.239 +</div>
   1.240 +<div class="section" id="raising-exceptions-with-mocks">
   1.241 +<h3>Raising exceptions with mocks<a class="headerlink" href="#raising-exceptions-with-mocks" title="Permalink to this headline">¶</a></h3>
   1.242 +<p>A useful attribute is <tt class="xref py py-attr docutils literal"><span class="pre">side_effect</span></tt>. If you set this to an
   1.243 +exception class or instance then the exception will be raised when the mock
   1.244 +is called.</p>
   1.245 +<div class="highlight-python"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="n">mock</span> <span class="o">=</span> <span class="n">Mock</span><span class="p">(</span><span class="n">side_effect</span><span class="o">=</span><span class="ne">Exception</span><span class="p">(</span><span class="s">&#39;Boom!&#39;</span><span class="p">))</span>
   1.246 +<span class="gp">&gt;&gt;&gt; </span><span class="n">mock</span><span class="p">()</span>
   1.247 +<span class="gt">Traceback (most recent call last):</span>
   1.248 +  <span class="c">...</span>
   1.249 +<span class="gr">Exception</span>: <span class="n">Boom!</span>
   1.250 +</pre></div>
   1.251 +</div>
   1.252 +</div>
   1.253 +<div class="section" id="side-effect-functions-and-iterables">
   1.254 +<h3>Side effect functions and iterables<a class="headerlink" href="#side-effect-functions-and-iterables" title="Permalink to this headline">¶</a></h3>
   1.255 +<p><cite>side_effect</cite> can also be set to a function or an iterable. The use case for
   1.256 +<cite>side_effect</cite> as an iterable is where your mock is going to be called several
   1.257 +times, and you want each call to return a different value. When you set
   1.258 +<cite>side_effect</cite> to an iterable every call to the mock returns the next value
   1.259 +from the iterable:</p>
   1.260 +<div class="highlight-python"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="n">mock</span> <span class="o">=</span> <span class="n">MagicMock</span><span class="p">(</span><span class="n">side_effect</span><span class="o">=</span><span class="p">[</span><span class="mi">4</span><span class="p">,</span> <span class="mi">5</span><span class="p">,</span> <span class="mi">6</span><span class="p">])</span>
   1.261 +<span class="gp">&gt;&gt;&gt; </span><span class="n">mock</span><span class="p">()</span>
   1.262 +<span class="go">4</span>
   1.263 +<span class="gp">&gt;&gt;&gt; </span><span class="n">mock</span><span class="p">()</span>
   1.264 +<span class="go">5</span>
   1.265 +<span class="gp">&gt;&gt;&gt; </span><span class="n">mock</span><span class="p">()</span>
   1.266 +<span class="go">6</span>
   1.267 +</pre></div>
   1.268 +</div>
   1.269 +<p>For more advanced use cases, like dynamically varying the return values
   1.270 +depending on what the mock is called with, <cite>side_effect</cite> can be a function.
   1.271 +The function will be called with the same arguments as the mock. Whatever the
   1.272 +function returns is what the call returns:</p>
   1.273 +<div class="highlight-python"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="n">vals</span> <span class="o">=</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="mi">1</span><span class="p">,</span> <span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">):</span> <span class="mi">2</span><span class="p">}</span>
   1.274 +<span class="gp">&gt;&gt;&gt; </span><span class="k">def</span> <span class="nf">side_effect</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">):</span>
   1.275 +<span class="gp">... </span>    <span class="k">return</span> <span class="n">vals</span><span class="p">[</span><span class="n">args</span><span class="p">]</span>
   1.276 +<span class="gp">...</span>
   1.277 +<span class="gp">&gt;&gt;&gt; </span><span class="n">mock</span> <span class="o">=</span> <span class="n">MagicMock</span><span class="p">(</span><span class="n">side_effect</span><span class="o">=</span><span class="n">side_effect</span><span class="p">)</span>
   1.278 +<span class="gp">&gt;&gt;&gt; </span><span class="n">mock</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span>
   1.279 +<span class="go">1</span>
   1.280 +<span class="gp">&gt;&gt;&gt; </span><span class="n">mock</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">)</span>
   1.281 +<span class="go">2</span>
   1.282 +</pre></div>
   1.283 +</div>
   1.284 +</div>
   1.285 +<div class="section" id="creating-a-mock-from-an-existing-object">
   1.286 +<h3>Creating a Mock from an Existing Object<a class="headerlink" href="#creating-a-mock-from-an-existing-object" title="Permalink to this headline">¶</a></h3>
   1.287 +<p>One problem with over use of mocking is that it couples your tests to the
   1.288 +implementation of your mocks rather than your real code. Suppose you have a
   1.289 +class that implements <cite>some_method</cite>. In a test for another class, you
   1.290 +provide a mock of this object that <em>also</em> provides <cite>some_method</cite>. If later
   1.291 +you refactor the first class, so that it no longer has <cite>some_method</cite> - then
   1.292 +your tests will continue to pass even though your code is now broken!</p>
   1.293 +<p><cite>Mock</cite> allows you to provide an object as a specification for the mock,
   1.294 +using the <cite>spec</cite> keyword argument. Accessing methods / attributes on the
   1.295 +mock that don&#8217;t exist on your specification object will immediately raise an
   1.296 +attribute error. If you change the implementation of your specification, then
   1.297 +tests that use that class will start failing immediately without you having to
   1.298 +instantiate the class in those tests.</p>
   1.299 +<div class="highlight-python"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </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">SomeClass</span><span class="p">)</span>
   1.300 +<span class="gp">&gt;&gt;&gt; </span><span class="n">mock</span><span class="o">.</span><span class="n">old_method</span><span class="p">()</span>
   1.301 +<span class="gt">Traceback (most recent call last):</span>
   1.302 +   <span class="c">...</span>
   1.303 +<span class="gr">AttributeError</span>: <span class="n">object has no attribute &#39;old_method&#39;</span>
   1.304 +</pre></div>
   1.305 +</div>
   1.306 +<p>If you want a stronger form of specification that prevents the setting
   1.307 +of arbitrary attributes as well as the getting of them then you can use
   1.308 +<cite>spec_set</cite> instead of <cite>spec</cite>.</p>
   1.309 +</div>
   1.310 +</div>
   1.311 +<div class="section" id="patch-decorators">
   1.312 +<h2>Patch Decorators<a class="headerlink" href="#patch-decorators" title="Permalink to this headline">¶</a></h2>
   1.313 +<div class="admonition note">
   1.314 +<p class="first admonition-title">Note</p>
   1.315 +<p class="last">With <cite>patch</cite> it matters that you patch objects in the namespace where they
   1.316 +are looked up. This is normally straightforward, but for a quick guide
   1.317 +read <a class="reference internal" href="patch.html#where-to-patch"><em>where to patch</em></a>.</p>
   1.318 +</div>
   1.319 +<p>A common need in tests is to patch a class attribute or a module attribute,
   1.320 +for example patching a builtin or patching a class in a module to test that it
   1.321 +is instantiated. Modules and classes are effectively global, so patching on
   1.322 +them has to be undone after the test or the patch will persist into other
   1.323 +tests and cause hard to diagnose problems.</p>
   1.324 +<p>mock provides three convenient decorators for this: <cite>patch</cite>, <cite>patch.object</cite> and
   1.325 +<cite>patch.dict</cite>. <cite>patch</cite> takes a single string, of the form
   1.326 +<cite>package.module.Class.attribute</cite> to specify the attribute you are patching. It
   1.327 +also optionally takes a value that you want the attribute (or class or
   1.328 +whatever) to be replaced with. &#8216;patch.object&#8217; takes an object and the name of
   1.329 +the attribute you would like patched, plus optionally the value to patch it
   1.330 +with.</p>
   1.331 +<p><cite>patch.object</cite>:</p>
   1.332 +<div class="highlight-python"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="n">original</span> <span class="o">=</span> <span class="n">SomeClass</span><span class="o">.</span><span class="n">attribute</span>
   1.333 +<span class="gp">&gt;&gt;&gt; </span><span class="nd">@patch.object</span><span class="p">(</span><span class="n">SomeClass</span><span class="p">,</span> <span class="s">&#39;attribute&#39;</span><span class="p">,</span> <span class="n">sentinel</span><span class="o">.</span><span class="n">attribute</span><span class="p">)</span>
   1.334 +<span class="gp">... </span><span class="k">def</span> <span class="nf">test</span><span class="p">():</span>
   1.335 +<span class="gp">... </span>    <span class="k">assert</span> <span class="n">SomeClass</span><span class="o">.</span><span class="n">attribute</span> <span class="o">==</span> <span class="n">sentinel</span><span class="o">.</span><span class="n">attribute</span>
   1.336 +<span class="gp">...</span>
   1.337 +<span class="gp">&gt;&gt;&gt; </span><span class="n">test</span><span class="p">()</span>
   1.338 +<span class="gp">&gt;&gt;&gt; </span><span class="k">assert</span> <span class="n">SomeClass</span><span class="o">.</span><span class="n">attribute</span> <span class="o">==</span> <span class="n">original</span>
   1.339 +
   1.340 +<span class="gp">&gt;&gt;&gt; </span><span class="nd">@patch</span><span class="p">(</span><span class="s">&#39;package.module.attribute&#39;</span><span class="p">,</span> <span class="n">sentinel</span><span class="o">.</span><span class="n">attribute</span><span class="p">)</span>
   1.341 +<span class="gp">... </span><span class="k">def</span> <span class="nf">test</span><span class="p">():</span>
   1.342 +<span class="gp">... </span>    <span class="kn">from</span> <span class="nn">package.module</span> <span class="kn">import</span> <span class="n">attribute</span>
   1.343 +<span class="gp">... </span>    <span class="k">assert</span> <span class="n">attribute</span> <span class="ow">is</span> <span class="n">sentinel</span><span class="o">.</span><span class="n">attribute</span>
   1.344 +<span class="gp">...</span>
   1.345 +<span class="gp">&gt;&gt;&gt; </span><span class="n">test</span><span class="p">()</span>
   1.346 +</pre></div>
   1.347 +</div>
   1.348 +<p>If you are patching a module (including <cite>__builtin__</cite>) then use <cite>patch</cite>
   1.349 +instead of <cite>patch.object</cite>:</p>
   1.350 +<div class="highlight-python"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="n">mock</span> <span class="o">=</span> <span class="n">MagicMock</span><span class="p">(</span><span class="n">return_value</span> <span class="o">=</span> <span class="n">sentinel</span><span class="o">.</span><span class="n">file_handle</span><span class="p">)</span>
   1.351 +<span class="gp">&gt;&gt;&gt; </span><span class="k">with</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">mock</span><span class="p">):</span>
   1.352 +<span class="gp">... </span>    <span class="n">handle</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="s">&#39;filename&#39;</span><span class="p">,</span> <span class="s">&#39;r&#39;</span><span class="p">)</span>
   1.353 +<span class="gp">...</span>
   1.354 +<span class="gp">&gt;&gt;&gt; </span><span class="n">mock</span><span class="o">.</span><span class="n">assert_called_with</span><span class="p">(</span><span class="s">&#39;filename&#39;</span><span class="p">,</span> <span class="s">&#39;r&#39;</span><span class="p">)</span>
   1.355 +<span class="gp">&gt;&gt;&gt; </span><span class="k">assert</span> <span class="n">handle</span> <span class="o">==</span> <span class="n">sentinel</span><span class="o">.</span><span class="n">file_handle</span><span class="p">,</span> <span class="s">&quot;incorrect file handle returned&quot;</span>
   1.356 +</pre></div>
   1.357 +</div>
   1.358 +<p>The module name can be &#8216;dotted&#8217;, in the form <cite>package.module</cite> if needed:</p>
   1.359 +<div class="highlight-python"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="nd">@patch</span><span class="p">(</span><span class="s">&#39;package.module.ClassName.attribute&#39;</span><span class="p">,</span> <span class="n">sentinel</span><span class="o">.</span><span class="n">attribute</span><span class="p">)</span>
   1.360 +<span class="gp">... </span><span class="k">def</span> <span class="nf">test</span><span class="p">():</span>
   1.361 +<span class="gp">... </span>    <span class="kn">from</span> <span class="nn">package.module</span> <span class="kn">import</span> <span class="n">ClassName</span>
   1.362 +<span class="gp">... </span>    <span class="k">assert</span> <span class="n">ClassName</span><span class="o">.</span><span class="n">attribute</span> <span class="o">==</span> <span class="n">sentinel</span><span class="o">.</span><span class="n">attribute</span>
   1.363 +<span class="gp">...</span>
   1.364 +<span class="gp">&gt;&gt;&gt; </span><span class="n">test</span><span class="p">()</span>
   1.365 +</pre></div>
   1.366 +</div>
   1.367 +<p>A nice pattern is to actually decorate test methods themselves:</p>
   1.368 +<div class="highlight-python"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="k">class</span> <span class="nc">MyTest</span><span class="p">(</span><span class="n">unittest2</span><span class="o">.</span><span class="n">TestCase</span><span class="p">):</span>
   1.369 +<span class="gp">... </span>    <span class="nd">@patch.object</span><span class="p">(</span><span class="n">SomeClass</span><span class="p">,</span> <span class="s">&#39;attribute&#39;</span><span class="p">,</span> <span class="n">sentinel</span><span class="o">.</span><span class="n">attribute</span><span class="p">)</span>
   1.370 +<span class="gp">... </span>    <span class="k">def</span> <span class="nf">test_something</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
   1.371 +<span class="gp">... </span>        <span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">SomeClass</span><span class="o">.</span><span class="n">attribute</span><span class="p">,</span> <span class="n">sentinel</span><span class="o">.</span><span class="n">attribute</span><span class="p">)</span>
   1.372 +<span class="gp">...</span>
   1.373 +<span class="gp">&gt;&gt;&gt; </span><span class="n">original</span> <span class="o">=</span> <span class="n">SomeClass</span><span class="o">.</span><span class="n">attribute</span>
   1.374 +<span class="gp">&gt;&gt;&gt; </span><span class="n">MyTest</span><span class="p">(</span><span class="s">&#39;test_something&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">test_something</span><span class="p">()</span>
   1.375 +<span class="gp">&gt;&gt;&gt; </span><span class="k">assert</span> <span class="n">SomeClass</span><span class="o">.</span><span class="n">attribute</span> <span class="o">==</span> <span class="n">original</span>
   1.376 +</pre></div>
   1.377 +</div>
   1.378 +<p>If you want to patch with a Mock, you can use <cite>patch</cite> with only one argument
   1.379 +(or <cite>patch.object</cite> with two arguments). The mock will be created for you and
   1.380 +passed into the test function / method:</p>
   1.381 +<div class="highlight-python"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="k">class</span> <span class="nc">MyTest</span><span class="p">(</span><span class="n">unittest2</span><span class="o">.</span><span class="n">TestCase</span><span class="p">):</span>
   1.382 +<span class="gp">... </span>    <span class="nd">@patch.object</span><span class="p">(</span><span class="n">SomeClass</span><span class="p">,</span> <span class="s">&#39;static_method&#39;</span><span class="p">)</span>
   1.383 +<span class="gp">... </span>    <span class="k">def</span> <span class="nf">test_something</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">mock_method</span><span class="p">):</span>
   1.384 +<span class="gp">... </span>        <span class="n">SomeClass</span><span class="o">.</span><span class="n">static_method</span><span class="p">()</span>
   1.385 +<span class="gp">... </span>        <span class="n">mock_method</span><span class="o">.</span><span class="n">assert_called_with</span><span class="p">()</span>
   1.386 +<span class="gp">...</span>
   1.387 +<span class="gp">&gt;&gt;&gt; </span><span class="n">MyTest</span><span class="p">(</span><span class="s">&#39;test_something&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">test_something</span><span class="p">()</span>
   1.388 +</pre></div>
   1.389 +</div>
   1.390 +<p>You can stack up multiple patch decorators using this pattern:</p>
   1.391 +<div class="highlight-python"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="k">class</span> <span class="nc">MyTest</span><span class="p">(</span><span class="n">unittest2</span><span class="o">.</span><span class="n">TestCase</span><span class="p">):</span>
   1.392 +<span class="gp">... </span>    <span class="nd">@patch</span><span class="p">(</span><span class="s">&#39;package.module.ClassName1&#39;</span><span class="p">)</span>
   1.393 +<span class="gp">... </span>    <span class="nd">@patch</span><span class="p">(</span><span class="s">&#39;package.module.ClassName2&#39;</span><span class="p">)</span>
   1.394 +<span class="gp">... </span>    <span class="k">def</span> <span class="nf">test_something</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">MockClass2</span><span class="p">,</span> <span class="n">MockClass1</span><span class="p">):</span>
   1.395 +<span class="gp">... </span>        <span class="bp">self</span><span class="o">.</span><span class="n">assertTrue</span><span class="p">(</span><span class="n">package</span><span class="o">.</span><span class="n">module</span><span class="o">.</span><span class="n">ClassName1</span> <span class="ow">is</span> <span class="n">MockClass1</span><span class="p">)</span>
   1.396 +<span class="gp">... </span>        <span class="bp">self</span><span class="o">.</span><span class="n">assertTrue</span><span class="p">(</span><span class="n">package</span><span class="o">.</span><span class="n">module</span><span class="o">.</span><span class="n">ClassName2</span> <span class="ow">is</span> <span class="n">MockClass2</span><span class="p">)</span>
   1.397 +<span class="gp">...</span>
   1.398 +<span class="gp">&gt;&gt;&gt; </span><span class="n">MyTest</span><span class="p">(</span><span class="s">&#39;test_something&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">test_something</span><span class="p">()</span>
   1.399 +</pre></div>
   1.400 +</div>
   1.401 +<p>When you nest patch decorators the mocks are passed in to the decorated
   1.402 +function in the same order they applied (the normal <em>python</em> order that
   1.403 +decorators are applied). This means from the bottom up, so in the example
   1.404 +above the mock for <cite>test_module.ClassName2</cite> is passed in first.</p>
   1.405 +<p>There is also <tt class="xref py py-func docutils literal"><span class="pre">patch.dict()</span></tt> for setting values in a dictionary just
   1.406 +during a scope and restoring the dictionary to its original state when the test
   1.407 +ends:</p>
   1.408 +<div class="highlight-python"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="n">foo</span> <span class="o">=</span> <span class="p">{</span><span class="s">&#39;key&#39;</span><span class="p">:</span> <span class="s">&#39;value&#39;</span><span class="p">}</span>
   1.409 +<span class="gp">&gt;&gt;&gt; </span><span class="n">original</span> <span class="o">=</span> <span class="n">foo</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
   1.410 +<span class="gp">&gt;&gt;&gt; </span><span class="k">with</span> <span class="n">patch</span><span class="o">.</span><span class="n">dict</span><span class="p">(</span><span class="n">foo</span><span class="p">,</span> <span class="p">{</span><span class="s">&#39;newkey&#39;</span><span class="p">:</span> <span class="s">&#39;newvalue&#39;</span><span class="p">},</span> <span class="n">clear</span><span class="o">=</span><span class="bp">True</span><span class="p">):</span>
   1.411 +<span class="gp">... </span>    <span class="k">assert</span> <span class="n">foo</span> <span class="o">==</span> <span class="p">{</span><span class="s">&#39;newkey&#39;</span><span class="p">:</span> <span class="s">&#39;newvalue&#39;</span><span class="p">}</span>
   1.412 +<span class="gp">...</span>
   1.413 +<span class="gp">&gt;&gt;&gt; </span><span class="k">assert</span> <span class="n">foo</span> <span class="o">==</span> <span class="n">original</span>
   1.414 +</pre></div>
   1.415 +</div>
   1.416 +<p><cite>patch</cite>, <cite>patch.object</cite> and <cite>patch.dict</cite> can all be used as context managers.</p>
   1.417 +<p>Where you use <cite>patch</cite> to create a mock for you, you can get a reference to the
   1.418 +mock using the &#8220;as&#8221; form of the with statement:</p>
   1.419 +<div class="highlight-python"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="k">class</span> <span class="nc">ProductionClass</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
   1.420 +<span class="gp">... </span>    <span class="k">def</span> <span class="nf">method</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
   1.421 +<span class="gp">... </span>        <span class="k">pass</span>
   1.422 +<span class="gp">...</span>
   1.423 +<span class="gp">&gt;&gt;&gt; </span><span class="k">with</span> <span class="n">patch</span><span class="o">.</span><span class="n">object</span><span class="p">(</span><span class="n">ProductionClass</span><span class="p">,</span> <span class="s">&#39;method&#39;</span><span class="p">)</span> <span class="k">as</span> <span class="n">mock_method</span><span class="p">:</span>
   1.424 +<span class="gp">... </span>    <span class="n">mock_method</span><span class="o">.</span><span class="n">return_value</span> <span class="o">=</span> <span class="bp">None</span>
   1.425 +<span class="gp">... </span>    <span class="n">real</span> <span class="o">=</span> <span class="n">ProductionClass</span><span class="p">()</span>
   1.426 +<span class="gp">... </span>    <span class="n">real</span><span class="o">.</span><span class="n">method</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="mi">3</span><span class="p">)</span>
   1.427 +<span class="gp">...</span>
   1.428 +<span class="gp">&gt;&gt;&gt; </span><span class="n">mock_method</span><span class="o">.</span><span class="n">assert_called_with</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="mi">3</span><span class="p">)</span>
   1.429 +</pre></div>
   1.430 +</div>
   1.431 +<p>As an alternative <cite>patch</cite>, <cite>patch.object</cite> and <cite>patch.dict</cite> can be used as
   1.432 +class decorators. When used in this way it is the same as applying the
   1.433 +decorator indvidually to every method whose name starts with &#8220;test&#8221;.</p>
   1.434 +<p>For some more advanced examples, see the <a class="reference internal" href="examples.html#further-examples"><em>Further Examples</em></a> page.</p>
   1.435 +</div>
   1.436 +</div>
   1.437 +
   1.438 +
   1.439 +          </div>
   1.440 +        </div>
   1.441 +      </div>
   1.442 +      <div class="sphinxsidebar">
   1.443 +        <div class="sphinxsidebarwrapper">
   1.444 +  <h3><a href="index.html">Table Of Contents</a></h3>
   1.445 +  <ul>
   1.446 +<li><a class="reference internal" href="#">Getting Started with Mock</a><ul>
   1.447 +<li><a class="reference internal" href="#using-mock">Using Mock</a><ul>
   1.448 +<li><a class="reference internal" href="#mock-patching-methods">Mock Patching Methods</a></li>
   1.449 +<li><a class="reference internal" href="#mock-for-method-calls-on-an-object">Mock for Method Calls on an Object</a></li>
   1.450 +<li><a class="reference internal" href="#mocking-classes">Mocking Classes</a></li>
   1.451 +<li><a class="reference internal" href="#naming-your-mocks">Naming your mocks</a></li>
   1.452 +<li><a class="reference internal" href="#tracking-all-calls">Tracking all Calls</a></li>
   1.453 +<li><a class="reference internal" href="#setting-return-values-and-attributes">Setting Return Values and Attributes</a></li>
   1.454 +<li><a class="reference internal" href="#raising-exceptions-with-mocks">Raising exceptions with mocks</a></li>
   1.455 +<li><a class="reference internal" href="#side-effect-functions-and-iterables">Side effect functions and iterables</a></li>
   1.456 +<li><a class="reference internal" href="#creating-a-mock-from-an-existing-object">Creating a Mock from an Existing Object</a></li>
   1.457 +</ul>
   1.458 +</li>
   1.459 +<li><a class="reference internal" href="#patch-decorators">Patch Decorators</a></li>
   1.460 +</ul>
   1.461 +</li>
   1.462 +</ul>
   1.463 +
   1.464 +  <h4>Previous topic</h4>
   1.465 +  <p class="topless"><a href="magicmock.html"
   1.466 +                        title="previous chapter">Mocking Magic Methods</a></p>
   1.467 +  <h4>Next topic</h4>
   1.468 +  <p class="topless"><a href="examples.html"
   1.469 +                        title="next chapter">Further Examples</a></p>
   1.470 +  <h3>This Page</h3>
   1.471 +  <ul class="this-page-menu">
   1.472 +    <li><a href="_sources/getting-started.txt"
   1.473 +           rel="nofollow">Show Source</a></li>
   1.474 +  </ul>
   1.475 +<div id="searchbox" style="display: none">
   1.476 +  <h3>Quick search</h3>
   1.477 +    <form class="search" action="search.html" method="get">
   1.478 +      <input type="text" name="q" />
   1.479 +      <input type="submit" value="Go" />
   1.480 +      <input type="hidden" name="check_keywords" value="yes" />
   1.481 +      <input type="hidden" name="area" value="default" />
   1.482 +    </form>
   1.483 +    <p class="searchtip" style="font-size: 90%">
   1.484 +    Enter search terms or a module, class or function name.
   1.485 +    </p>
   1.486 +</div>
   1.487 +<script type="text/javascript">$('#searchbox').show(0);</script>
   1.488 +        </div>
   1.489 +      </div>
   1.490 +      <div class="clearer"></div>
   1.491 +    </div>
   1.492 +    <div class="related">
   1.493 +      <h3>Navigation</h3>
   1.494 +      <ul>
   1.495 +        <li class="right" style="margin-right: 10px">
   1.496 +          <a href="genindex.html" title="General Index"
   1.497 +             >index</a></li>
   1.498 +        <li class="right" >
   1.499 +          <a href="examples.html" title="Further Examples"
   1.500 +             >next</a> |</li>
   1.501 +        <li class="right" >
   1.502 +          <a href="magicmock.html" title="Mocking Magic Methods"
   1.503 +             >previous</a> |</li>
   1.504 +        <li><a href="index.html">Mock 1.0.0 documentation</a> &raquo;</li> 
   1.505 +      </ul>
   1.506 +    </div>
   1.507 +    <div class="footer">
   1.508 +        &copy; Copyright 2007-2012, Michael Foord &amp; the mock team.
   1.509 +      Last updated on Oct 07, 2012.
   1.510 +      Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.1.3.
   1.511 +    </div>
   1.512 +  </body>
   1.513 +</html>
   1.514 \ No newline at end of file

mercurial