菜鸟教程小白 发表于 2022-12-12 12:34:02

IOS毒蛇: How protocol helps in Unit Testing?


                                            <p><p>我对 VIPER 架构中协议(protocol)的好处有点困惑。
我了解 DI(依赖注入(inject))是通过协议(protocol)实现的,并有助于避免对象之间的直接依赖关系 - 我同意。</p>

<p>但我从使用的角度来看真正的好处,一个例子可能是 - 特别是协议(protocol)如何帮助在单元测试中受益(测试交互器部分)。</p>

<p>我们不能通过方法回调的 usingblock 来实现相同的效果吗?
希望有人可以通过一些示例从使用角度帮助我理解</p>

<p>干杯</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>使用回调,例如从 Interactor 到 Presenter,可能会使 Presenter 的测试变得更加困难。</p>

<p>在为 Presenter 如何处理输入(从 Interactor 发送)编写测试时,您的测试必须在 Presenter 上调用一些方法,这会导致 Presenter 对 Interactor 进行调用,这会导致 Interactor 发送数据给演示者。</p>

<p>通过让 Presenter 实现由 Interactor 定义的协议(protocol),您的测试可以直接在 Presenter 上调用适当的输入法。</p>

<p>就声明协议(protocol)而言,我以模拟角色的风格练习 TDD,而不是对象 (<a href="http://www.jmock.org/oopsla2004.pdf" rel="noreferrer noopener nofollow">http://www.jmock.org/oopsla2004.pdf</a>)。这些协议(protocol)通过关注对象的作用(其角色)而不是它的作用方式来帮助提供更好的抽象。</p>

<p>协议(protocol)本身对单元测试没有什么值(value)。您的单元测试将为被测系统的依赖项提供测试替身(<a href="http://martinfowler.com/bliki/TestDouble.html" rel="noreferrer noopener nofollow">http://martinfowler.com/bliki/TestDouble.html</a>)。即使您将依赖项公开为具体类,您仍然可以为您的测试创建测试替身。</p>

<p>在 Objective-C 中,您可以使用诸如 OCMock (<a href="http://ocmock.org" rel="noreferrer noopener nofollow">http://ocmock.org</a>) 或 OCMockito (<a href="https://github.com/jonreid/OCMockito" rel="noreferrer noopener nofollow">https://github.com/jonreid/OCMockito</a>) 之类的模拟库来创建具体类的 stub 、 spy 或模拟。</p>

<p>在 Swift 中,您可以通过子类化每个用作依赖项的具体类来创建测试替身。</p>

<p>简而言之,协议(protocol)不是用来简化单元测试,而是在更高的抽象层次上描述应用程序的功能。</p>

<p>下面是一个例子,说明抽象协议(protocol)在事后是如何有益的:</p>

<p>我创建了一个协议(protocol)来表示用户可以在屏幕上执行的操作,例如<code>ProfileUserActions</code>,具有 <code>changeName</code> 和 <code>changeAddress</code> 等操作。 Presenter 实现了 <code>ProfileUserActions</code>,而 View 接受了一个 <code>ProfileUserActions</code> 作为依赖项。当用户点击屏幕上的按钮时, View 会向其 <code>userActions</code> 对象发送适当的消息。</p>

<p>当我想添加分析时,我能够创建一个新的、独立的 <code>ProfileAnalytics</code> 类,该类还实现了 <code>ProfileUserActions</code>。我在 View 和 Presenter 之间插入了分析对象,这允许应用程序捕获分析,而无需修改 View 或 Presenter。</p></p>
                                   
                                                <p style="font-size: 20px;">关于IOS毒蛇: How protocol helps in Unit Testing?,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/41198279/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/41198279/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: IOS毒蛇: How protocol helps in Unit Testing?