1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/python/mock-1.0.0/html/mocksignature.html Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,352 @@ 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>mocksignature — Mock 0.8.1alpha1 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: '0.8.1alpha1', 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 0.8.1alpha1 documentation" href="index.html" /> 1.31 + <link rel="next" title="Getting Started with Mock" href="getting-started.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="getting-started.html" title="Getting Started with Mock" 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 0.8.1alpha1 documentation</a> »</li> 1.48 + </ul> 1.49 + </div> 1.50 + 1.51 + <div class="document"> 1.52 + <div class="documentwrapper"> 1.53 + <div class="bodywrapper"> 1.54 + <div class="body"> 1.55 + 1.56 + <div class="section" id="mocksignature"> 1.57 +<h1>mocksignature<a class="headerlink" href="#mocksignature" title="Permalink to this headline">¶</a></h1> 1.58 +<div class="admonition note"> 1.59 +<p class="first admonition-title">Note</p> 1.60 +<p class="last"><a class="reference internal" href="helpers.html#auto-speccing"><em>Autospeccing</em></a>, added in mock 0.8, is a more advanced version of 1.61 +<cite>mocksignature</cite> and can be used for many of the same use cases.</p> 1.62 +</div> 1.63 +<p>A problem with using mock objects to replace real objects in your tests is that 1.64 +<a class="reference internal" href="mock.html#mock.Mock" title="mock.Mock"><tt class="xref py py-class docutils literal"><span class="pre">Mock</span></tt></a> can be <em>too</em> flexible. Your code can treat the mock objects in 1.65 +any way and you have to manually check that they were called correctly. If your 1.66 +code calls functions or methods with the wrong number of arguments then mocks 1.67 +don’t complain.</p> 1.68 +<p>The solution to this is <cite>mocksignature</cite>, which creates functions with the 1.69 +same signature as the original, but delegating to a mock. You can interrogate 1.70 +the mock in the usual way to check it has been called with the <em>right</em> 1.71 +arguments, but if it is called with the wrong number of arguments it will 1.72 +raise a <cite>TypeError</cite> in the same way your production code would.</p> 1.73 +<p>Another advantage is that your mocked objects are real functions, which can 1.74 +be useful when your code uses 1.75 +<a class="reference external" href="http://docs.python.org/library/inspect.html">inspect</a> or depends on 1.76 +functions being function objects.</p> 1.77 +<dl class="function"> 1.78 +<dt id="mock.mocksignature"> 1.79 +<tt class="descname">mocksignature</tt><big>(</big><em>func</em>, <em>mock=None</em>, <em>skipfirst=False</em><big>)</big><a class="headerlink" href="#mock.mocksignature" title="Permalink to this definition">¶</a></dt> 1.80 +<dd><p>Create a new function with the same signature as <cite>func</cite> that delegates 1.81 +to <cite>mock</cite>. If <cite>skipfirst</cite> is True the first argument is skipped, useful 1.82 +for methods where <cite>self</cite> needs to be omitted from the new function.</p> 1.83 +<p>If you don’t pass in a <cite>mock</cite> then one will be created for you.</p> 1.84 +<p>Functions returned by <cite>mocksignature</cite> have many of the same attributes 1.85 +and assert methods as a mock object.</p> 1.86 +<p>The mock is set as the <cite>mock</cite> attribute of the returned function for easy 1.87 +access.</p> 1.88 +<p><cite>mocksignature</cite> can also be used with classes. It copies the signature of 1.89 +the <cite>__init__</cite> method.</p> 1.90 +<p>When used with callable objects (instances) it copies the signature of the 1.91 +<cite>__call__</cite> method.</p> 1.92 +</dd></dl> 1.93 + 1.94 +<p><cite>mocksignature</cite> will work out if it is mocking the signature of a method on 1.95 +an instance or a method on a class and do the “right thing” with the <cite>self</cite> 1.96 +argument in both cases.</p> 1.97 +<p>Because of a limitation in the way that arguments are collected by functions 1.98 +created by <cite>mocksignature</cite> they are <em>always</em> passed as positional arguments 1.99 +(including defaults) and not keyword arguments.</p> 1.100 +<div class="section" id="mocksignature-api"> 1.101 +<h2>mocksignature api<a class="headerlink" href="#mocksignature-api" title="Permalink to this headline">¶</a></h2> 1.102 +<p>Although the objects returned by <cite>mocksignature</cite> api are real function objects, 1.103 +they have much of the same api as the <a class="reference internal" href="mock.html#mock.Mock" title="mock.Mock"><tt class="xref py py-class docutils literal"><span class="pre">Mock</span></tt></a> class. This includes the 1.104 +assert methods:</p> 1.105 +<div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="k">def</span> <span class="nf">func</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.106 +<span class="gp">... </span> <span class="k">pass</span> 1.107 +<span class="gp">...</span> 1.108 +<span class="gp">>>> </span><span class="n">func2</span> <span class="o">=</span> <span class="n">mocksignature</span><span class="p">(</span><span class="n">func</span><span class="p">)</span> 1.109 +<span class="gp">>>> </span><span class="n">func2</span><span class="o">.</span><span class="n">called</span> 1.110 +<span class="go">False</span> 1.111 +<span class="gp">>>> </span><span class="n">func2</span><span class="o">.</span><span class="n">return_value</span> <span class="o">=</span> <span class="mi">3</span> 1.112 +<span class="gp">>>> </span><span class="n">func2</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.113 +<span class="go">3</span> 1.114 +<span class="gp">>>> </span><span class="n">func2</span><span class="o">.</span><span class="n">called</span> 1.115 +<span class="go">True</span> 1.116 +<span class="gp">>>> </span><span class="n">func2</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.117 +<span class="gp">>>> </span><span class="n">func2</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">4</span><span class="p">)</span> 1.118 +<span class="gt">Traceback (most recent call last):</span> 1.119 + <span class="c">...</span> 1.120 +<span class="gr">AssertionError: Expected call</span>: <span class="n">mock(1, 2, 4)</span> 1.121 +<span class="go">Actual call: mock(1, 2, 3)</span> 1.122 +<span class="gp">>>> </span><span class="n">func2</span><span class="o">.</span><span class="n">call_count</span> 1.123 +<span class="go">1</span> 1.124 +<span class="gp">>>> </span><span class="n">func2</span><span class="o">.</span><span class="n">side_effect</span> <span class="o">=</span> <span class="ne">IndexError</span> 1.125 +<span class="gp">>>> </span><span class="n">func2</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.126 +<span class="gt">Traceback (most recent call last):</span> 1.127 + <span class="c">...</span> 1.128 +<span class="gr">IndexError</span> 1.129 +</pre></div> 1.130 +</div> 1.131 +<p>The mock object that is being delegated to is available as the <cite>mock</cite> attribute 1.132 +of the function created by <cite>mocksignature</cite>.</p> 1.133 +<div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="n">func2</span><span class="o">.</span><span class="n">mock</span><span class="o">.</span><span class="n">mock_calls</span> 1.134 +<span class="go">[call(1, 2, 3), call(4, 5, 6)]</span> 1.135 +</pre></div> 1.136 +</div> 1.137 +<p>The methods and attributes available on functions returned by <cite>mocksignature</cite> 1.138 +are:</p> 1.139 +<blockquote> 1.140 +<div><a class="reference internal" href="mock.html#mock.Mock.assert_any_call" title="mock.Mock.assert_any_call"><tt class="xref py py-meth docutils literal"><span class="pre">assert_any_call()</span></tt></a>, <a class="reference internal" href="mock.html#mock.Mock.assert_called_once_with" title="mock.Mock.assert_called_once_with"><tt class="xref py py-meth docutils literal"><span class="pre">assert_called_once_with()</span></tt></a>, 1.141 +<a class="reference internal" href="mock.html#mock.Mock.assert_called_with" title="mock.Mock.assert_called_with"><tt class="xref py py-meth docutils literal"><span class="pre">assert_called_with()</span></tt></a>, <a class="reference internal" href="mock.html#mock.Mock.assert_has_calls" title="mock.Mock.assert_has_calls"><tt class="xref py py-meth docutils literal"><span class="pre">assert_has_calls()</span></tt></a>, 1.142 +<a class="reference internal" href="mock.html#mock.Mock.call_args" title="mock.Mock.call_args"><tt class="xref py py-attr docutils literal"><span class="pre">call_args</span></tt></a>, <a class="reference internal" href="mock.html#mock.Mock.call_args_list" title="mock.Mock.call_args_list"><tt class="xref py py-attr docutils literal"><span class="pre">call_args_list</span></tt></a>, 1.143 +<a class="reference internal" href="mock.html#mock.Mock.call_count" title="mock.Mock.call_count"><tt class="xref py py-attr docutils literal"><span class="pre">call_count</span></tt></a>, <a class="reference internal" href="mock.html#mock.Mock.called" title="mock.Mock.called"><tt class="xref py py-attr docutils literal"><span class="pre">called</span></tt></a>, 1.144 +<a class="reference internal" href="mock.html#mock.Mock.method_calls" title="mock.Mock.method_calls"><tt class="xref py py-attr docutils literal"><span class="pre">method_calls</span></tt></a>, <cite>mock</cite>, <a class="reference internal" href="mock.html#mock.Mock.mock_calls" title="mock.Mock.mock_calls"><tt class="xref py py-attr docutils literal"><span class="pre">mock_calls</span></tt></a>, 1.145 +<a class="reference internal" href="mock.html#mock.Mock.reset_mock" title="mock.Mock.reset_mock"><tt class="xref py py-meth docutils literal"><span class="pre">reset_mock()</span></tt></a>, <a class="reference internal" href="mock.html#mock.Mock.return_value" title="mock.Mock.return_value"><tt class="xref py py-attr docutils literal"><span class="pre">return_value</span></tt></a>, and 1.146 +<a class="reference internal" href="mock.html#mock.Mock.side_effect" title="mock.Mock.side_effect"><tt class="xref py py-attr docutils literal"><span class="pre">side_effect</span></tt></a>.</div></blockquote> 1.147 +</div> 1.148 +<div class="section" id="example-use"> 1.149 +<h2>Example use<a class="headerlink" href="#example-use" title="Permalink to this headline">¶</a></h2> 1.150 +<div class="section" id="basic-use"> 1.151 +<h3>Basic use<a class="headerlink" href="#basic-use" title="Permalink to this headline">¶</a></h3> 1.152 +<div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="k">def</span> <span class="nf">function</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="o">=</span><span class="bp">None</span><span class="p">):</span> 1.153 +<span class="gp">... </span> <span class="k">pass</span> 1.154 +<span class="gp">...</span> 1.155 +<span class="gp">>>> </span><span class="n">mock</span> <span class="o">=</span> <span class="n">Mock</span><span class="p">()</span> 1.156 +<span class="gp">>>> </span><span class="n">function</span> <span class="o">=</span> <span class="n">mocksignature</span><span class="p">(</span><span class="n">function</span><span class="p">,</span> <span class="n">mock</span><span class="p">)</span> 1.157 +<span class="gp">>>> </span><span class="n">function</span><span class="p">()</span> 1.158 +<span class="gt">Traceback (most recent call last):</span> 1.159 + <span class="c">...</span> 1.160 +<span class="gr">TypeError</span>: <span class="n"><lambda>() takes at least 2 arguments (0 given)</span> 1.161 +<span class="gp">>>> </span><span class="n">function</span><span class="o">.</span><span class="n">return_value</span> <span class="o">=</span> <span class="s">'some value'</span> 1.162 +<span class="gp">>>> </span><span class="n">function</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="s">'foo'</span><span class="p">)</span> 1.163 +<span class="go">'some value'</span> 1.164 +<span class="gp">>>> </span><span class="n">function</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="s">'foo'</span><span class="p">)</span> 1.165 +</pre></div> 1.166 +</div> 1.167 +</div> 1.168 +<div class="section" id="keyword-arguments"> 1.169 +<h3>Keyword arguments<a class="headerlink" href="#keyword-arguments" title="Permalink to this headline">¶</a></h3> 1.170 +<p>Note that arguments to functions created by <cite>mocksignature</cite> are always passed 1.171 +in to the underlying mock by position even when called with keywords:</p> 1.172 +<div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="k">def</span> <span class="nf">function</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="o">=</span><span class="bp">None</span><span class="p">):</span> 1.173 +<span class="gp">... </span> <span class="k">pass</span> 1.174 +<span class="gp">...</span> 1.175 +<span class="gp">>>> </span><span class="n">function</span> <span class="o">=</span> <span class="n">mocksignature</span><span class="p">(</span><span class="n">function</span><span class="p">)</span> 1.176 +<span class="gp">>>> </span><span class="n">function</span><span class="o">.</span><span class="n">return_value</span> <span class="o">=</span> <span class="bp">None</span> 1.177 +<span class="gp">>>> </span><span class="n">function</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span> 1.178 +<span class="gp">>>> </span><span class="n">function</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="bp">None</span><span class="p">)</span> 1.179 +</pre></div> 1.180 +</div> 1.181 +</div> 1.182 +<div class="section" id="mocking-methods-and-self"> 1.183 +<h3>Mocking methods and self<a class="headerlink" href="#mocking-methods-and-self" title="Permalink to this headline">¶</a></h3> 1.184 +<p>When you use <cite>mocksignature</cite> to replace a method on a class then <cite>self</cite> 1.185 +will be included in the method signature - and you will need to include 1.186 +the instance when you do your asserts.</p> 1.187 +<p>As a curious factor of the way Python (2) wraps methods fetched from a class, 1.188 +we can <em>get</em> the <cite>return_value</cite> from a function set on a class, but we can’t 1.189 +set it. We have to do this through the exposed <cite>mock</cite> attribute instead:</p> 1.190 +<div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="k">class</span> <span class="nc">SomeClass</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span> 1.191 +<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> <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="o">=</span><span class="bp">None</span><span class="p">):</span> 1.192 +<span class="gp">... </span> <span class="k">pass</span> 1.193 +<span class="gp">...</span> 1.194 +<span class="gp">>>> </span><span class="n">SomeClass</span><span class="o">.</span><span class="n">method</span> <span class="o">=</span> <span class="n">mocksignature</span><span class="p">(</span><span class="n">SomeClass</span><span class="o">.</span><span class="n">method</span><span class="p">)</span> 1.195 +<span class="gp">>>> </span><span class="n">SomeClass</span><span class="o">.</span><span class="n">method</span><span class="o">.</span><span class="n">mock</span><span class="o">.</span><span class="n">return_value</span> <span class="o">=</span> <span class="bp">None</span> 1.196 +<span class="gp">>>> </span><span class="n">instance</span> <span class="o">=</span> <span class="n">SomeClass</span><span class="p">()</span> 1.197 +<span class="gp">>>> </span><span class="n">instance</span><span class="o">.</span><span class="n">method</span><span class="p">()</span> 1.198 +<span class="gt">Traceback (most recent call last):</span> 1.199 + <span class="c">...</span> 1.200 +<span class="gr">TypeError</span>: <span class="n"><lambda>() takes at least 4 arguments (1 given)</span> 1.201 +<span class="gp">>>> </span><span class="n">instance</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.202 +<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">assert_called_with</span><span class="p">(</span><span class="n">instance</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.203 +</pre></div> 1.204 +</div> 1.205 +<p>When you use <cite>mocksignature</cite> on instance methods <cite>self</cite> isn’t included (and we 1.206 +can set the <cite>return_value</cite> etc directly):</p> 1.207 +<div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="k">class</span> <span class="nc">SomeClass</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span> 1.208 +<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> <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="o">=</span><span class="bp">None</span><span class="p">):</span> 1.209 +<span class="gp">... </span> <span class="k">pass</span> 1.210 +<span class="gp">...</span> 1.211 +<span class="gp">>>> </span><span class="n">instance</span> <span class="o">=</span> <span class="n">SomeClass</span><span class="p">()</span> 1.212 +<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">mocksignature</span><span class="p">(</span><span class="n">instance</span><span class="o">.</span><span class="n">method</span><span class="p">)</span> 1.213 +<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="bp">None</span> 1.214 +<span class="gp">>>> </span><span class="n">instance</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.215 +<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">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.216 +</pre></div> 1.217 +</div> 1.218 +</div> 1.219 +<div class="section" id="mocksignature-with-classes"> 1.220 +<h3>mocksignature with classes<a class="headerlink" href="#mocksignature-with-classes" title="Permalink to this headline">¶</a></h3> 1.221 +<p>When used with a class <cite>mocksignature</cite> copies the signature of the <cite>__init__</cite> 1.222 +method.</p> 1.223 +<div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="k">class</span> <span class="nc">Something</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span> 1.224 +<span class="gp">... </span> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">foo</span><span class="p">,</span> <span class="n">bar</span><span class="p">):</span> 1.225 +<span class="gp">... </span> <span class="k">pass</span> 1.226 +<span class="gp">...</span> 1.227 +<span class="gp">>>> </span><span class="n">MockSomething</span> <span class="o">=</span> <span class="n">mocksignature</span><span class="p">(</span><span class="n">Something</span><span class="p">)</span> 1.228 +<span class="gp">>>> </span><span class="n">instance</span> <span class="o">=</span> <span class="n">MockSomething</span><span class="p">(</span><span class="mi">10</span><span class="p">,</span> <span class="mi">9</span><span class="p">)</span> 1.229 +<span class="gp">>>> </span><span class="k">assert</span> <span class="n">instance</span> <span class="ow">is</span> <span class="n">MockSomething</span><span class="o">.</span><span class="n">return_value</span> 1.230 +<span class="gp">>>> </span><span class="n">MockSomething</span><span class="o">.</span><span class="n">assert_called_with</span><span class="p">(</span><span class="mi">10</span><span class="p">,</span> <span class="mi">9</span><span class="p">)</span> 1.231 +<span class="gp">>>> </span><span class="n">MockSomething</span><span class="p">()</span> 1.232 +<span class="gt">Traceback (most recent call last):</span> 1.233 + <span class="c">...</span> 1.234 +<span class="gr">TypeError</span>: <span class="n"><lambda>() takes at least 2 arguments (0 given)</span> 1.235 +</pre></div> 1.236 +</div> 1.237 +<p>Because the object returned by <cite>mocksignature</cite> is a function rather than a 1.238 +<cite>Mock</cite> you lose the other capabilities of <cite>Mock</cite>, like dynamic attribute 1.239 +creation.</p> 1.240 +</div> 1.241 +<div class="section" id="mocksignature-with-callable-objects"> 1.242 +<h3>mocksignature with callable objects<a class="headerlink" href="#mocksignature-with-callable-objects" title="Permalink to this headline">¶</a></h3> 1.243 +<p>When used with a callable object <cite>mocksignature</cite> copies the signature of the 1.244 +<cite>__call__</cite> method.</p> 1.245 +<div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="k">class</span> <span class="nc">Something</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span> 1.246 +<span class="gp">... </span> <span class="k">def</span> <span class="nf">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">spam</span><span class="p">,</span> <span class="n">eggs</span><span class="p">):</span> 1.247 +<span class="gp">... </span> <span class="k">pass</span> 1.248 +<span class="gp">...</span> 1.249 +<span class="gp">>>> </span><span class="n">something</span> <span class="o">=</span> <span class="n">Something</span><span class="p">()</span> 1.250 +<span class="gp">>>> </span><span class="n">mock_something</span> <span class="o">=</span> <span class="n">mocksignature</span><span class="p">(</span><span class="n">something</span><span class="p">)</span> 1.251 +<span class="gp">>>> </span><span class="n">result</span> <span class="o">=</span> <span class="n">mock_something</span><span class="p">(</span><span class="mi">10</span><span class="p">,</span> <span class="mi">9</span><span class="p">)</span> 1.252 +<span class="gp">>>> </span><span class="n">mock_something</span><span class="o">.</span><span class="n">assert_called_with</span><span class="p">(</span><span class="mi">10</span><span class="p">,</span> <span class="mi">9</span><span class="p">)</span> 1.253 +<span class="gp">>>> </span><span class="n">mock_something</span><span class="p">()</span> 1.254 +<span class="gt">Traceback (most recent call last):</span> 1.255 + <span class="c">...</span> 1.256 +<span class="gr">TypeError</span>: <span class="n"><lambda>() takes at least 2 arguments (0 given)</span> 1.257 +</pre></div> 1.258 +</div> 1.259 +</div> 1.260 +</div> 1.261 +<div class="section" id="mocksignature-argument-to-patch"> 1.262 +<h2>mocksignature argument to patch<a class="headerlink" href="#mocksignature-argument-to-patch" title="Permalink to this headline">¶</a></h2> 1.263 +<p><cite>mocksignature</cite> is available as a keyword argument to <a class="reference internal" href="patch.html#mock.patch" title="mock.patch"><tt class="xref py py-func docutils literal"><span class="pre">patch()</span></tt></a> or 1.264 +<a class="reference internal" href="patch.html#mock.patch.object" title="mock.patch.object"><tt class="xref py py-func docutils literal"><span class="pre">patch.object()</span></tt></a>. It can be used with functions / methods / classes and 1.265 +callable objects.</p> 1.266 +<div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="k">class</span> <span class="nc">SomeClass</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span> 1.267 +<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> <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="o">=</span><span class="bp">None</span><span class="p">):</span> 1.268 +<span class="gp">... </span> <span class="k">pass</span> 1.269 +<span class="gp">...</span> 1.270 +<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">'method'</span><span class="p">,</span> <span class="n">mocksignature</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span> 1.271 +<span class="gp">... </span><span class="k">def</span> <span class="nf">test</span><span class="p">(</span><span class="n">mock_method</span><span class="p">):</span> 1.272 +<span class="gp">... </span> <span class="n">instance</span> <span class="o">=</span> <span class="n">SomeClass</span><span class="p">()</span> 1.273 +<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.274 +<span class="gp">... </span> <span class="n">instance</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> 1.275 +<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><span class="n">instance</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="bp">None</span><span class="p">)</span> 1.276 +<span class="gp">...</span> 1.277 +<span class="gp">>>> </span><span class="n">test</span><span class="p">()</span> 1.278 +</pre></div> 1.279 +</div> 1.280 +</div> 1.281 +</div> 1.282 + 1.283 + 1.284 + </div> 1.285 + </div> 1.286 + </div> 1.287 + <div class="sphinxsidebar"> 1.288 + <div class="sphinxsidebarwrapper"> 1.289 + <h3><a href="index.html">Table Of Contents</a></h3> 1.290 + <ul> 1.291 +<li><a class="reference internal" href="#">mocksignature</a><ul> 1.292 +<li><a class="reference internal" href="#mocksignature-api">mocksignature api</a></li> 1.293 +<li><a class="reference internal" href="#example-use">Example use</a><ul> 1.294 +<li><a class="reference internal" href="#basic-use">Basic use</a></li> 1.295 +<li><a class="reference internal" href="#keyword-arguments">Keyword arguments</a></li> 1.296 +<li><a class="reference internal" href="#mocking-methods-and-self">Mocking methods and self</a></li> 1.297 +<li><a class="reference internal" href="#mocksignature-with-classes">mocksignature with classes</a></li> 1.298 +<li><a class="reference internal" href="#mocksignature-with-callable-objects">mocksignature with callable objects</a></li> 1.299 +</ul> 1.300 +</li> 1.301 +<li><a class="reference internal" href="#mocksignature-argument-to-patch">mocksignature argument to patch</a></li> 1.302 +</ul> 1.303 +</li> 1.304 +</ul> 1.305 + 1.306 + <h4>Previous topic</h4> 1.307 + <p class="topless"><a href="magicmock.html" 1.308 + title="previous chapter">Mocking Magic Methods</a></p> 1.309 + <h4>Next topic</h4> 1.310 + <p class="topless"><a href="getting-started.html" 1.311 + title="next chapter">Getting Started with Mock</a></p> 1.312 + <h3>This Page</h3> 1.313 + <ul class="this-page-menu"> 1.314 + <li><a href="_sources/mocksignature.txt" 1.315 + rel="nofollow">Show Source</a></li> 1.316 + </ul> 1.317 +<div id="searchbox" style="display: none"> 1.318 + <h3>Quick search</h3> 1.319 + <form class="search" action="search.html" method="get"> 1.320 + <input type="text" name="q" /> 1.321 + <input type="submit" value="Go" /> 1.322 + <input type="hidden" name="check_keywords" value="yes" /> 1.323 + <input type="hidden" name="area" value="default" /> 1.324 + </form> 1.325 + <p class="searchtip" style="font-size: 90%"> 1.326 + Enter search terms or a module, class or function name. 1.327 + </p> 1.328 +</div> 1.329 +<script type="text/javascript">$('#searchbox').show(0);</script> 1.330 + </div> 1.331 + </div> 1.332 + <div class="clearer"></div> 1.333 + </div> 1.334 + <div class="related"> 1.335 + <h3>Navigation</h3> 1.336 + <ul> 1.337 + <li class="right" style="margin-right: 10px"> 1.338 + <a href="genindex.html" title="General Index" 1.339 + >index</a></li> 1.340 + <li class="right" > 1.341 + <a href="getting-started.html" title="Getting Started with Mock" 1.342 + >next</a> |</li> 1.343 + <li class="right" > 1.344 + <a href="magicmock.html" title="Mocking Magic Methods" 1.345 + >previous</a> |</li> 1.346 + <li><a href="index.html">Mock 0.8.1alpha1 documentation</a> »</li> 1.347 + </ul> 1.348 + </div> 1.349 + <div class="footer"> 1.350 + © Copyright 2007-2012, Michael Foord & the mock team. 1.351 + Last updated on Feb 16, 2012. 1.352 + Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.1.2. 1.353 + </div> 1.354 + </body> 1.355 +</html> 1.356 \ No newline at end of file