2016-06-08 41 views
1

我使用OCMock v3做單元測試,我想測試下面的一段代碼:檢查參數值傳遞給函數在單元測試

@implementation School 
-(void) handleStudent:(Student*) student{ 
Bool result = [self checkIdentityWithName:student.name age:student.age]; 
... 
} 
... 
@end 

在我下面的測試情況下,我創建了一個student實例名稱爲「約翰」,23歲,然後我在試運行功能:

-(void) testHandleStudent{ 
    Student *student = [Student initWithName:@"John" age:23]; 
    // function under test 
    [schoolPartialMock handleStudent:student]; 

    // I want to not only verify checkIdentityWithName:age: get called, 
    // but also check the exact argument is passed in. that's John 23 in this case 
    // how to check argument ? 

} 

在我的測試情況下,我想驗證確切的參數值傳遞到功能checkIdentityWithName:age:。這就是名字「約翰」,並使用了23歲。如何驗證在OCMock v3? (有它的文檔怎麼做,在沒有明顯的例子。)

回答

0

你可以把它像

-(void) testHandleStudent{ 
    id studentMock = OCMClassMock([Student class]); 
    OCMStub([studentMock name]).andReturn(@"John"); 
    OCMStub([studentMock age]).andReturn(23); 

    [schoolPartialMock handleStudent:studentMock]; 
    OCMVerify([schoolPartialMock checkIdentityWithName:@"John" age:23]); 
} 

-(void) testHandleStudent{ 
     id studentMock = OCMClassMock([Student class]); 
     OCMStub([studentMock name]).andReturn(@"John"); 
     OCMStub([studentMock age]).andReturn(23); 

     OCMExpect([schoolPartialMock checkIdentityWithName:@"John" age:23]); 

     [schoolPartialMock handleStudent:studentMock]; 

     OCMVerifyAll(schoolPartialMock); 
    } 

希望這有助於

+0

謝謝,我d希望看到任何其他答案都可以提供一個解決方案,以便用OCMock 3隨時捕捉參數。如果不可能,我會接受這個答案。 –

+0

謝謝,但如果你看OCMock 3文檔我提供的答案匹配此文檔和語法。 – iSashok

+0

這是正確的答案。如果你真的想捕捉參數來做斷言,那麼你必須使用'andDo'來使用塊。在這種情況下,您必須格外小心,確定變量的範圍,並保留從調用中提取的參數。之前的問題已經被問及(並回答了!)。 –