2010-06-29 90 views
0

我已成功爲iPhone SDK版本3.1.2設置XCode版本3.2.2項目的單元測試。OCUnit故障 - 實例化自定義數據類型

我創建了一個類「標註」,我試圖在單元測試的上下文中實例化。該類有一個方法,

-(id) initWithDictionary:(NSDictionary*)calloutDict includesSong:(BOOL)hasSong lastUpdate:(NSDate*)lastUpdate; 

我正在調用單元測試。當我這樣做時,我收到錯誤「無法識別的實例發送到選擇器」。這對我沒有任何意義,所以出於好奇,我把所有的東西都放在一起,然後像字典參數那樣傳遞'nil',然後它建立並運行(當然,測試失敗了,但它仍然運行)。

有沒有人有任何線索這裏發生了什麼?我認爲在OCUnit中使用自定義數據類型沒有什麼問題,因爲我在單元測試的其他地方成功完成了它。

這裏是有問題的代碼,順便說一句:

- (void)testCalloutNormal 
{ 
NSDictionary *params = [[NSDictionary alloc] initWithObjects:[NSMutableArray arrayWithObjects:@"sent", 
        [NSNumber numberWithInt:100], 
        [NSNumber numberWithInt:50], 
        @"challengerUsername", 
        @"challengedUsername", 
        [NSDate date], 
        nil] 
       forKeys:[NSMutableArray arrayWithObjects:@"type", 
        @"challengerScore", 
        @"challengedScore", 
        @"challenger", 
        @"challenged", 
        @"dateAccepted", 
        nil]]; 
Callout *callout; 
callout = [[Callout alloc] initWithDictionary:params includesSong:NO lastUpdate:[NSDate date]]; 
NSInteger ID = 1; 
callout.calloutID = 1; 
[params release]; 


STAssertEquals(CalloutOutcomeTypeWon, callout.outcome, @"Failure: challenger's score is higher than the challengee - should return CalloutOutcomeTypeWon"); 

} 

謝謝!

-Matt

P.S. - 我發現的與OCUnit相關的大多數線程通常都包含了一些更好的單元測試框架的建議。我知道他們在那裏,但我沒有真正感興趣,除非你有什麼不同於GHUnit或Mac的Google工具箱。

回答

0

我不能肯定地說,但我懷疑問題是與OCUnit。根據錯誤消失的事實,當您將字典參數傳遞給nil時,我會猜測這些違規消息會發送到您的類中的某個位置以供字典引用使用。當字典引用爲零時,它只是吸收消息。順便說一句,如果你正在尋找一個不同於OCUnit/GHUnit/GTM的測試框架,我建議你檢查一下Cedar;它是BDD風格的測試框架,如Rspec或Jasmine。但是,如前所述,我懷疑測試框架是您的問題。