菜鸟教程小白 发表于 2022-12-13 05:21:36

ios - 如何使用 OCMockito stub 类方法?


                                            <p><p><a href="https://github.com/jonreid/OCMockito#how-do-you-mock-a-class-object" rel="noreferrer noopener nofollow">OCMockito documentation claims it&#39;s possible to mock class objects</a> ,但我该死的,如果我能弄清楚怎么做。以下测试失败,<code>Expected "Purple"but was ""</code>:</p>

<pre><code>- (void)testClassMethodMocking
{
    Class stringClassMock = mockClass();
    ) willReturn:@&#34;Purple&#34;];

    assertThat(, equalTo(@&#34;Purple&#34;));
}
</code></pre>

<p>如果上面链接的常见问题解答部分的答案“你如何模拟一个类对象?” <em>not</em> 是否暗示可以 stub 类方法的返回值,它用于什么<em></em>?</p>

<p><strong>编辑:</strong></p>

<p>当然上面是一个退化的例子,真正的调用在被测方法内部:</p>

<pre><code>- (NSString *)methodThatCallsAClassMethod
{
    return ;
}
</code></pre>

<p>... 使上面的断言看起来像:</p>

<pre><code>assertThat(, equalTo(@&#34;Purple&#34;));
</code></pre>

<p>所以上面的方法完全行不通?那么,我该如何实现我想要在这里做的事情呢?</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>您的断言语句直接使用 NSString。改用模拟:</p>

<pre><code>assertThat(, equalTo(@&#34;Purple&#34;));
</code></pre>

<p>换句话说,mock 并没有调动实际的 NSString。相反,它是它的替代品。</p>

<p><strong>编辑:</strong></p>

<p>在您编辑的示例中,您的“methodThatCallsAClassMethod”依赖于 NSString。如果你想替换它,你要么需要注入(inject)类,要么需要注入(inject)子类和覆盖方法。</p>

<p><em>注入(inject):</em></p>

<pre><code>return ;
</code></pre>

<p>然后您可以将 <code>stringClass</code> 属性设置为模拟。</p>

<p><em>子类和覆盖方法:</em></p>

<pre><code>@interface TestingFoo : Foo
@end

@implementation @TestingFoo

- (NSString *)methodThatCallsAClassMethod
{
    // return whatever you want
}

@end
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 如何使用 OCMockitostub 类方法?,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/19799393/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/19799393/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 如何使用 OCMockito stub 类方法?