2011-05-06 33 views
1

我爲一個委託對象設置了一個模擬對象,以檢查URL何時爲零,委託方法以nil作爲參數調用。當參數不是預期的參數時,OCMock拋出NSInternalInconsistencyException

FileDownloadOperation表現符合預期時,測試通過,這很好。

FileDownloadOperation未調用委託方法時,測試將按預期失敗。

但當FileDownloadOperation調用比nil別的東西的委託方法,而不是失敗,測試崩潰並沒有其他的測試執行,因爲OCMock拋出:

「NSInternalInconsistencyException」的原因:「OCMockObject [FileDownloadOperationTest]:意外的方法調用:數據:<> forURL:無

-(void) testNilURL{ 
     // 1. Create an operation 
     FileDownloadOperation * anOp = [[FileDownloadOperation alloc]init]; 
     // 2. set a nil URL 
     anOp.URL = nil; 
     // 3. set a mock delegate 
     id mockDelegate = [OCMockObject mockForClass:[self class]]; 
     [[mockDelegate expect] data:[OCMArg isNil] forURL:[OCMArg isNil]]; 
     anOp.delegate = mockDelegate; 
     // 4. launch operation 
     [anOp main]; 
     // 5. ASSERT mock delegate is called with nil data 
     STAssertNoThrow([mockDelegate verify], @"Delegate should be called with nil data and nil URL"); 
     [anOp release]; 
    } 

它是預期的行爲?還是我做錯了什麼? 謝謝!

+0

這是在安裝iOS 5.0模擬器解決,現在OCMock只是報告測試失敗。 – yonix 2011-11-10 11:50:32

回答

4

OCMock拋出異常來報告不匹配,相信OCUnit捕獲並報告任何異常。但是due to a bug in the iOS Simulator,單元測試無法捕捉異常,所以只是崩潰。

(我目前正在寫一個新的模擬框架,通過不依賴於異常解決此問題的作品。)

相關問題