2013-10-14 77 views
0

在使用OCMock進行的測試中,我必須斷言沒有調用setState:選擇器。但是,我不能假定對該對象進行的其他調用。OCMock:niceMockForClass期望零方法調用

因爲任何其他的呼叫可以進行,我得(還是我?)使用的niceMockForClass:代替mockForClass:

我怎樣才能然後確保不會調用setState:發? 代碼大致是這樣的:

- (void)testNoCallIsMadeToSetStateOnReset 
{ 
    self.downloader = [OCMock niceMockForClass:[Downloader class]]; 

    [[self.downloader expectZero] setState:OCMOCK_ANY]; // <- how to do this? 

    // do some stuff 
    [self.downloader verify] 
} 

回答

1

您可以使用[[yourMock reject] setState:OCMOCK_ANY];

+0

快到了,但是...的的setState:方法的參數是一個枚舉。 'typedef enum {...} DownloaderState'。它似乎不適用於OCMOCK_ANY。有沒有解決方法? – aspyct

+0

對不起,但我不知道該怎麼做,沒有什麼像OCMOCK_ANY_VALUE。也許其他人可以幫助... ...作爲替代方案,您可以使用普通模擬(不好),並存儲可能在您的模擬中調用的方法,或拒絕setState:所有可能的參數。 – e1985

+0

另一個解決方法是使用真實對象而不是模擬,並直接檢查狀態屬性的值。在測試代​​碼之前,您可以將其設置爲enum中不存在的值,並在檢查值是否仍然相同之後進行測試......如果您想要存根/期望某些東西,也可以創建此對象的部分模擬... – e1985