8

iOS テスト用の OCMock を学習しています。「クラスモック」と「部分モック」の違いは何ですか? また、どちらを使用する必要があるのですか?

http://ocmock.org/features/

4

1 に答える 1

14

Class mocksクラス インスタンスの純粋なモックであるオブジェクトを作成します。

Partial mocksクラスのインスタンスを取得して、そのメソッドのいずれかをスタブ化できます。

これらのクラスがあるとします:

@interface Foo : NSObject
- (void)doX;
@end
@implementation
- (void)doX
{
    NSLog(@"X");
}
@end

@interface Bar : NSObject
- (void)doA:(Foo *)foo;
- (void)doB;
@end
@implementation Bar
- (void)doA:(Foo *)foo
{
    NSLog(@"A");
    [foo doX];
    [self doB];
}
- (void)doB
{
    NSLog(@"B");
}
@end

doA:バーの方法をテストすることに興味があります。doXオブジェクトを呼び出してFooから、独自のdoBメソッドを呼び出すことを期待しています。これは、Foo のクラス モックと Bar の部分モックを使用して実装します。

- (void)test_doA_shouldCall_doX_and_doB
{
    id objectUnderTest = [OCMockObject partialMockForObject:[Bar new]];
    id fooMock = [OCMockObject mockForClass:Foo.class];
    [[fooMock expect] doX];
    [[objectUnderTest expect] doB];
    // Make the call
    [objectUnderTest doA:fooMock];
    [objectUnderTest verify];
    [fooMock verify];
}

ここで、部分モックにより、別のインスタンス メソッドへの内部呼び出しをモックしながら、テストしたい実際のメソッドを呼び出すことができたことがわかります。ただし、Foo の実際の機能はまったく必要なかったので、クラス モックを使用しました。

于 2013-08-18T02:05:43.437 に答える