0

OCMock を使用するテストケースに苦労しています。これまでのところ、いくつかのプロジェクトで OCMock を使用しましたが、常に思ったとおりに動作します。[self setNeedsDisplay]というプロパティを設定したときに呼び出されるテストを行う次のメソッドがありますimage

- (void)testSetTapColorCallsDrawRect 
{
    SMColorButton *button = [[SMColorButton alloc] initWithImage:nil];
    id mock = [OCMockObject partialMockForObject:button];

    // Exptect setNeedsDisplay. 
    [[mock expect] setImage:OCMOCK_ANY];
    [[mock expect] setNeedsDisplay];

    button.image = [UIImage imageNamed:@"Button.png"];

    [mock verify];
}

プロパティのセッターはimage次のようになります。

- (void)setImage:(UIImage *)anImage
{
    // Set the image if it changed.
    if (anImage != image) {
        image = anImage;
        [self setNeedsDisplay];
    }
}

[self setNeedsDisplay]がセッターで呼び出されていることがわかります。しかし、テストを実行すると、次のエラーが発生します。

OCPartialMockObject[SMColorButton]: expected method was not invoked: setNeedsDisplay

メソッドが呼び出されていないように見えます。しかし、setter メソッドにブレークポイントを設定すると、停止し、その行がアプリケーションによって実行されたことが示されます。

あなたは私を助けることができます?何が間違っているのかわかりません...

4

1 に答える 1

2

問題は、テストしているメソッドをモックしていることですsetImage:。その期待は呼び出しをインターセプトするため、テスト対象のクラスのコード パスをたどることはありません。テストを次のように変更してみてください。

- (void)testSetTapColorCallsDrawRect 
{
    SMColorButton *button = [[SMColorButton alloc] initWithImage:nil];
    id mock = [OCMockObject partialMockForObject:button];    
    [[mock expect] setNeedsDisplay];

    button.image = [UIImage imageNamed:@"Button.png"];

    [mock verify];
}
于 2012-07-29T16:02:52.447 に答える