Skip to content

Commit

Permalink
Deployed 63dd357 to v3.0 with MkDocs 1.6.1 and mike 2.2.0.dev0
Browse files Browse the repository at this point in the history
  • Loading branch information
vektra-bot committed Jan 20, 2025
1 parent c06da14 commit c566276
Show file tree
Hide file tree
Showing 7 changed files with 587 additions and 285 deletions.
6 changes: 3 additions & 3 deletions v3.0/configuration/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -1152,7 +1152,7 @@ <h2 id="example">Example<a class="headerlink" href="#example" title="Permanent l
<ol>
<li>The parameters are merged hierarchically</li>
<li>There are a number of template variables available to generalize config values.</li>
<li>The style of mock to be generated is specified using the <a href="templates/index.md"><code>template</code></a> parameter.</li>
<li>The style of mock to be generated is specified using the <a href="../template/"><code>template</code></a> parameter.</li>
</ol>
<p>An output file may contain multiple mocks, but the only rule is that all the mocks in the file must come from the same package. Because of this, mocks for different packages must go in different files.</p>
<h2 id="parameter-descriptions">Parameter Descriptions<a class="headerlink" href="#parameter-descriptions" title="Permanent link">&para;</a></h2>
Expand Down Expand Up @@ -1245,7 +1245,7 @@ <h2 id="parameter-descriptions">Parameter Descriptions<a class="headerlink" href
<td>Use <code>outpkg</code> to specify the package name of the generated mocks.</td>
</tr>
<tr>
<td><a href="features.md#packages-configuration"><code>packages</code></a></td>
<td><code>packages</code></td>
<td><span class="twemoji"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M376.6 84.5c11.3-13.6 9.5-33.8-4.1-45.1s-33.8-9.5-45.1 4.1L192 206 56.6 43.5c-11.3-13.6-31.5-15.4-45.1-4.1S-3.9 70.9 7.4 84.5L150.3 256 7.4 427.5c-11.3 13.6-9.5 33.8 4.1 45.1s33.8 9.5 45.1-4.1L192 306l135.4 162.5c11.3 13.6 31.5 15.4 45.1 4.1s15.4-31.5 4.1-45.1L233.7 256z"/></svg></span></td>
<td><code class="highlight"><span class="l l-Scalar l-Scalar-Plain">null</span></code></td>
<td>A dictionary containing configuration describing the packages and interfaces to generate mocks for.</td>
Expand All @@ -1257,7 +1257,7 @@ <h2 id="parameter-descriptions">Parameter Descriptions<a class="headerlink" href
<td></td>
</tr>
<tr>
<td><a href="features.md#recursive-package-discovery"><code>recursive</code></a></td>
<td><code>recursive</code></td>
<td><span class="twemoji"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M376.6 84.5c11.3-13.6 9.5-33.8-4.1-45.1s-33.8-9.5-45.1 4.1L192 206 56.6 43.5c-11.3-13.6-31.5-15.4-45.1-4.1S-3.9 70.9 7.4 84.5L150.3 256 7.4 427.5c-11.3 13.6-9.5 33.8 4.1 45.1s33.8 9.5 45.1-4.1L192 306l135.4 162.5c11.3 13.6 31.5 15.4 45.1 4.1s15.4-31.5 4.1-45.1L233.7 256z"/></svg></span></td>
<td><code class="highlight"><span class="l l-Scalar l-Scalar-Plain">false</span></code></td>
<td>When set to <code>true</code> on a particular package, mockery will recursively search for all sub-packages and inject those packages into the config map.</td>
Expand Down
121 changes: 5 additions & 116 deletions v3.0/faq/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -842,32 +842,6 @@
</span>
</a>

</li>

<li class="md-nav__item">
<a href="#multiple-expectations-with-identical-arguments" class="md-nav__link">
<span class="md-ellipsis">

<span class="md-typeset">
Multiple Expectations With Identical Arguments
</span>

</span>
</a>

</li>

<li class="md-nav__item">
<a href="#variadic-arguments" class="md-nav__link">
<span class="md-ellipsis">

<span class="md-typeset">
Variadic Arguments
</span>

</span>
</a>

</li>

<li class="md-nav__item">
Expand Down Expand Up @@ -1002,32 +976,6 @@
</span>
</a>

</li>

<li class="md-nav__item">
<a href="#multiple-expectations-with-identical-arguments" class="md-nav__link">
<span class="md-ellipsis">

<span class="md-typeset">
Multiple Expectations With Identical Arguments
</span>

</span>
</a>

</li>

<li class="md-nav__item">
<a href="#variadic-arguments" class="md-nav__link">
<span class="md-ellipsis">

<span class="md-typeset">
Variadic Arguments
</span>

</span>
</a>

</li>

<li class="md-nav__item">
Expand Down Expand Up @@ -1116,73 +1064,14 @@ <h2 id="internal-error-package-without-types-was-imported">internal error: packa
<li>Reinstall mockery</li>
</ol>
<p>Additionally, this issue only happens when compiling mockery from source, such as with <code>go install</code>. Our docs <a href="../installation#go-install">recommend not to use <code>go install</code></a> as the success of your build depends on the compatibility of your Go version with the semantics in use. You would not encounter this issue if using one of the installation methods that install pre-built binaries, like downloading the <code>.tar.gz</code> binaries, or through <code>brew install</code>.</p>
<h2 id="multiple-expectations-with-identical-arguments">Multiple Expectations With Identical Arguments<a class="headerlink" href="#multiple-expectations-with-identical-arguments" title="Permanent link">&para;</a></h2>
<p>There might be instances where you want a mock to return different values on successive calls that provide the same arguments. For example, we might want to test this behavior:</p>
<div class="highlight"><span class="filename">Go</span><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><span class="c1">// Return &quot;foo&quot; on the first call</span>
<a id="__codelineno-0-2" name="__codelineno-0-2" href="#__codelineno-0-2"></a><span class="nx">getter</span><span class="w"> </span><span class="o">:=</span><span class="w"> </span><span class="nx">NewGetter</span><span class="p">()</span>
<a id="__codelineno-0-3" name="__codelineno-0-3" href="#__codelineno-0-3"></a><span class="nx">assert</span><span class="p">(</span><span class="nx">t</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;foo&quot;</span><span class="p">,</span><span class="w"> </span><span class="nx">getter</span><span class="p">.</span><span class="nx">Get</span><span class="p">(</span><span class="s">&quot;key&quot;</span><span class="p">))</span>
<a id="__codelineno-0-4" name="__codelineno-0-4" href="#__codelineno-0-4"></a>
<a id="__codelineno-0-5" name="__codelineno-0-5" href="#__codelineno-0-5"></a><span class="c1">// Return &quot;bar&quot; on the second call</span>
<a id="__codelineno-0-6" name="__codelineno-0-6" href="#__codelineno-0-6"></a><span class="nx">assert</span><span class="p">(</span><span class="nx">t</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;bar&quot;</span><span class="p">,</span><span class="w"> </span><span class="nx">getter</span><span class="p">.</span><span class="nx">Get</span><span class="p">(</span><span class="s">&quot;key&quot;</span><span class="p">))</span>
</code></pre></div>
<p>This can be done by using the <code>.Once()</code> method on the mock call expectation:</p>
<div class="highlight"><span class="filename">Go</span><pre><span></span><code><a id="__codelineno-1-1" name="__codelineno-1-1" href="#__codelineno-1-1"></a><span class="nx">mockGetter</span><span class="w"> </span><span class="o">:=</span><span class="w"> </span><span class="nx">NewMockGetter</span><span class="p">(</span><span class="nx">t</span><span class="p">)</span>
<a id="__codelineno-1-2" name="__codelineno-1-2" href="#__codelineno-1-2"></a><span class="nx">mockGetter</span><span class="p">.</span><span class="nx">EXPECT</span><span class="p">().</span><span class="nx">Get</span><span class="p">(</span><span class="nx">mock</span><span class="p">.</span><span class="nx">anything</span><span class="p">).</span><span class="nx">Return</span><span class="p">(</span><span class="s">&quot;foo&quot;</span><span class="p">).</span><span class="nx">Once</span><span class="p">()</span>
<a id="__codelineno-1-3" name="__codelineno-1-3" href="#__codelineno-1-3"></a><span class="nx">mockGetter</span><span class="p">.</span><span class="nx">EXPECT</span><span class="p">().</span><span class="nx">Get</span><span class="p">(</span><span class="nx">mock</span><span class="p">.</span><span class="nx">anything</span><span class="p">).</span><span class="nx">Return</span><span class="p">(</span><span class="s">&quot;bar&quot;</span><span class="p">).</span><span class="nx">Once</span><span class="p">()</span>
</code></pre></div>
<p>Or you can identify an arbitrary number of times each value should be returned:</p>
<div class="highlight"><span class="filename">Go</span><pre><span></span><code><a id="__codelineno-2-1" name="__codelineno-2-1" href="#__codelineno-2-1"></a><span class="nx">mockGetter</span><span class="w"> </span><span class="o">:=</span><span class="w"> </span><span class="nx">NewMockGetter</span><span class="p">(</span><span class="nx">t</span><span class="p">)</span>
<a id="__codelineno-2-2" name="__codelineno-2-2" href="#__codelineno-2-2"></a><span class="nx">mockGetter</span><span class="p">.</span><span class="nx">EXPECT</span><span class="p">().</span><span class="nx">Get</span><span class="p">(</span><span class="nx">mock</span><span class="p">.</span><span class="nx">anything</span><span class="p">).</span><span class="nx">Return</span><span class="p">(</span><span class="s">&quot;foo&quot;</span><span class="p">).</span><span class="nx">Times</span><span class="p">(</span><span class="mi">4</span><span class="p">)</span>
<a id="__codelineno-2-3" name="__codelineno-2-3" href="#__codelineno-2-3"></a><span class="nx">mockGetter</span><span class="p">.</span><span class="nx">EXPECT</span><span class="p">().</span><span class="nx">Get</span><span class="p">(</span><span class="nx">mock</span><span class="p">.</span><span class="nx">anything</span><span class="p">).</span><span class="nx">Return</span><span class="p">(</span><span class="s">&quot;bar&quot;</span><span class="p">).</span><span class="nx">Times</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
</code></pre></div>
<p>Note that with proper Go support in your IDE, all the available methods are self-documented in autocompletion help contexts.</p>
<h2 id="variadic-arguments">Variadic Arguments<a class="headerlink" href="#variadic-arguments" title="Permanent link">&para;</a></h2>
<p>Consider if we have a function <code class="highlight"><span class="kd">func</span><span class="w"> </span><span class="nx">Bar</span><span class="p">(</span><span class="nx">message</span><span class="w"> </span><span class="o">...</span><span class="kt">string</span><span class="p">)</span><span class="w"> </span><span class="kt">error</span></code>. A typical assertion might look like this:</p>
<div class="highlight"><span class="filename">Go</span><pre><span></span><code><a id="__codelineno-3-1" name="__codelineno-3-1" href="#__codelineno-3-1"></a><span class="kd">func</span><span class="w"> </span><span class="nx">TestFoo</span><span class="p">(</span><span class="nx">t</span><span class="w"> </span><span class="o">*</span><span class="nx">testing</span><span class="p">.</span><span class="nx">T</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-3-2" name="__codelineno-3-2" href="#__codelineno-3-2"></a><span class="w"> </span><span class="nx">m</span><span class="w"> </span><span class="o">:=</span><span class="w"> </span><span class="nx">NewMockFoo</span><span class="p">(</span><span class="nx">t</span><span class="p">)</span>
<a id="__codelineno-3-3" name="__codelineno-3-3" href="#__codelineno-3-3"></a><span class="w"> </span><span class="nx">m</span><span class="p">.</span><span class="nx">On</span><span class="p">(</span><span class="s">&quot;Bar&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;hello&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;world&quot;</span><span class="p">).</span><span class="nx">Return</span><span class="p">(</span><span class="kc">nil</span><span class="p">)</span>
</code></pre></div>
<p>We might also want to make an assertion that says "any number of variadic arguments":</p>
<div class="highlight"><span class="filename">Go</span><pre><span></span><code><a id="__codelineno-4-1" name="__codelineno-4-1" href="#__codelineno-4-1"></a><span class="nx">m</span><span class="p">.</span><span class="nx">On</span><span class="p">(</span><span class="s">&quot;Bar&quot;</span><span class="p">,</span><span class="w"> </span><span class="nx">mock</span><span class="p">.</span><span class="nx">Anything</span><span class="p">).</span><span class="nx">Return</span><span class="p">(</span><span class="kc">nil</span><span class="p">)</span>
</code></pre></div>
<p>However, what we've given to mockery is ambiguous because it is impossible to distinguish between these two intentions:</p>
<ol>
<li>Any number of variadic arguments of any value</li>
<li>A single variadic argument of any value</li>
</ol>
<p>This is fixed in <a href="https://github.com/vektra/mockery/pull/359">#359</a> where you can provide <code>unroll-variadic: False</code> to get back to the old behavior. Thus, if you want to assert (1), you can then do:</p>
<div class="highlight"><span class="filename">Go</span><pre><span></span><code><a id="__codelineno-5-1" name="__codelineno-5-1" href="#__codelineno-5-1"></a><span class="nx">m</span><span class="p">.</span><span class="nx">On</span><span class="p">(</span><span class="s">&quot;Bar&quot;</span><span class="p">,</span><span class="w"> </span><span class="nx">mock</span><span class="p">.</span><span class="nx">Anything</span><span class="p">).</span><span class="nx">Return</span><span class="p">(</span><span class="kc">nil</span><span class="p">)</span>
</code></pre></div>
<p>If you want to assert (2), you must set <code>unroll-variadic: True</code>. Then this assertion's intention will be modified to mean the second case:</p>
<div class="highlight"><span class="filename">Go</span><pre><span></span><code><a id="__codelineno-6-1" name="__codelineno-6-1" href="#__codelineno-6-1"></a><span class="nx">m</span><span class="p">.</span><span class="nx">On</span><span class="p">(</span><span class="s">&quot;Bar&quot;</span><span class="p">,</span><span class="w"> </span><span class="nx">mock</span><span class="p">.</span><span class="nx">Anything</span><span class="p">).</span><span class="nx">Return</span><span class="p">(</span><span class="kc">nil</span><span class="p">)</span>
</code></pre></div>
<p>An upstream patch to <code>testify</code> is currently underway to allow passing <code>mock.Anything</code> directly to the variadic slice: <a href="https://github.com/stretchr/testify/pull/1348">https://github.com/stretchr/testify/pull/1348</a></p>
<p>If this is merged, it would become possible to describe the above two cases respectively:</p>
<div class="highlight"><span class="filename">Go</span><pre><span></span><code><a id="__codelineno-7-1" name="__codelineno-7-1" href="#__codelineno-7-1"></a><span class="c1">// case 1</span>
<a id="__codelineno-7-2" name="__codelineno-7-2" href="#__codelineno-7-2"></a><span class="nx">m</span><span class="p">.</span><span class="nx">On</span><span class="p">(</span><span class="s">&quot;Bar&quot;</span><span class="p">,</span><span class="w"> </span><span class="nx">mock</span><span class="p">.</span><span class="nx">Anything</span><span class="p">).</span><span class="nx">Return</span><span class="p">(</span><span class="kc">nil</span><span class="p">)</span>
<a id="__codelineno-7-3" name="__codelineno-7-3" href="#__codelineno-7-3"></a><span class="c1">// case 2</span>
<a id="__codelineno-7-4" name="__codelineno-7-4" href="#__codelineno-7-4"></a><span class="nx">m</span><span class="p">.</span><span class="nx">On</span><span class="p">(</span><span class="s">&quot;Bar&quot;</span><span class="p">,</span><span class="w"> </span><span class="p">[]</span><span class="kd">interface</span><span class="p">{}{</span><span class="nx">mock</span><span class="p">.</span><span class="nx">Anything</span><span class="p">}).</span><span class="nx">Return</span><span class="p">(</span><span class="kc">nil</span><span class="p">)</span>
</code></pre></div>
<p>References:</p>
<ul>
<li><a href="https://github.com/vektra/mockery/pull/359">https://github.com/vektra/mockery/pull/359</a></li>
<li><a href="https://github.com/vektra/mockery/pull/123">https://github.com/vektra/mockery/pull/123</a></li>
<li><a href="https://github.com/vektra/mockery/pull/550">https://github.com/vektra/mockery/pull/550</a></li>
<li><a href="https://github.com/vektra/mockery/issues/541">https://github.com/vektra/mockery/issues/541</a></li>
</ul>
<h2 id="semantic-versioning">Semantic Versioning<a class="headerlink" href="#semantic-versioning" title="Permanent link">&para;</a></h2>
<p>The versioning in this project applies only to the behavior of the mockery binary itself. This project explicitly does not promise a stable internal API, but rather a stable executable. The versioning applies to the following:</p>
<ol>
<li>CLI arguments.</li>
<li>Parsing of Go code. New features in the Go language will be supported in a backwards-compatible manner, except during major version bumps.</li>
<li>Behavior of mock objects. Mock objects can be considered to be part of the public API.</li>
<li>Behavior of mockery given a set of arguments.</li>
</ol>
<p>What the version does <em>not</em> track:</p>
<p>The mockery project follows the standard Semantic Versioning Semantics. The versioning applies to the following areas:</p>
<ol>
<li>The interfaces, objects, methods etc. in the vektra/mockery package.</li>
<li>Compatibility of <code>go get</code>-ing mockery with new or old versions of Go.</li>
<li>The shape of mocks generated by pre-curated templates.</li>
<li>Functions and data provided to templates specified with <code class="highlight"><span class="nt">template</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;file://&quot;</span></code>.</li>
<li>Configuration options.</li>
</ol>
<p>Mockery is not meant to be used as an imported library. Importing mockery code in external modules is not supported.</p>
<h2 id="mocking-interfaces-in-main">Mocking interfaces in <code>main</code><a class="headerlink" href="#mocking-interfaces-in-main" title="Permanent link">&para;</a></h2>
<p>When your interfaces are in the main package, you should supply the <code>--inpackage</code> flag.
This will generate mocks in the same package as the target code, avoiding import issues.</p>
Expand Down
2 changes: 1 addition & 1 deletion v3.0/search/search_index.json

Large diffs are not rendered by default.

Loading

0 comments on commit c566276

Please sign in to comment.