2012-07-28 108 views
0

我正在努力使用OCMock的測試用例。到目前爲止,我在一些項目中使用了OCMock,它總是按照我的想法工作。當我設置一個名爲image的屬性時,我有以下方法測試[self setNeedsDisplay]OCMock不識別被稱爲選擇器

- (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屬性的setter看起來像這樣。

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

你可以看到[self setNeedsDisplay]在setter中被調用。但是,當我進行的測試,我得到以下錯誤:

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

它看起來好像方法不叫。但是,如果我使用setter方法設置斷點,它會停止並向我顯示該行由應用程序執行。

你能幫我嗎?我沒有看到我在做什麼錯...

回答

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]; 
} 
+0

就是這樣!謝謝我沒有想到,但這完全合乎邏輯。 OCMock只是檢查方法是否被調用。現在測試失敗/按預期運行。謝謝! – 2012-07-29 18:03:19

相關問題