菜鸟教程小白 发表于 2022-12-12 18:05:44

ios - 如何知道XCTest中方法内部的方法是否已被调用


                                            <p><p>如何使用 Xcode 7 在 XCTest 框架中验证方法中的方法是否已被调用。</p>

<p>我想弄清楚的示例方法是</p>

<pre><code>-(void)setupMapAria {
//some code
];
//some code.
}
</code></pre>

<p>这里如何检查或编写单元测试用例是否已调用 <code>setUpLocation</code>。(注意此方法不返回任何内容)。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>我猜你不想测试 <code>setUpLocation</code> 已被调用。如果可能的话,更好的测试是在给定特定位置的情况下测试该方法的<strong>所需结果</strong>。</p>

<p>在这种情况下,挑战是用测试输入代替 <code></code> 以便您可以控制测试。我们要注入(inject)依赖。</p>

<p><a href="https://www.objc.io/issues/15-testing/dependency-injection/" rel="noreferrer noopener nofollow">Dependency Injection</a> 有多种形式.在您的示例中,额外的挑战是在生产代码中,<code>setupMapAria</code> 每次都应该获取当前位置的 <em>新实例</em>。</p>

<p>一个简单的方法是使用<strong>方法注入(inject)</strong>。我们可以创建一个新方法:</p>

<pre><code>-(void)setupMapAriaWithLocation:(UserLocation *)location;
</code></pre>

<p>测试更容易!只需传递您需要的任何内容。然后测试可以查询 <code>setUpLocation:</code> 所做的任何事情的状态。</p>

<p>至于 <code>setupMapAria</code>,您现在可以选择了。您可以保留它,只需调用 <code>setupMapAriaWithLocation:</code>。或者您可以消除它,并将调用者更改为传入当前位置。 …您甚至可能会发现您的程序因此更加灵活,因为您可以处理当前位置以外的位置。 (例如,用户在不同时间点的位置。)</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 如何知道XCTest中方法内部的方法是否已被调用,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/34717974/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/34717974/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 如何知道XCTest中方法内部的方法是否已被调用