Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/44.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone OCUnit出现问题-实例化自定义数据类型_Iphone_Objective C_Unit Testing_Xcode_Ocunit - Fatal编程技术网

Iphone OCUnit出现问题-实例化自定义数据类型

Iphone OCUnit出现问题-实例化自定义数据类型,iphone,objective-c,unit-testing,xcode,ocunit,Iphone,Objective C,Unit Testing,Xcode,Ocunit,我已经成功地为带有iPhoneSDK版本3.1.2的XCode版本3.2.2项目设置了单元测试 我已经创建了一个类“Callout”,我正试图在单元测试的上下文中实例化它。这个类有一个方法 -(id) initWithDictionary:(NSDictionary*)calloutDict includesSong:(BOOL)hasSong lastUpdate:(NSDate*)lastUpdate; 我在单元测试中调用它。执行此操作时,会出现错误“无法识别的实例发送到选择器”。这对我来

我已经成功地为带有iPhoneSDK版本3.1.2的XCode版本3.2.2项目设置了单元测试

我已经创建了一个类“Callout”,我正试图在单元测试的上下文中实例化它。这个类有一个方法

-(id) initWithDictionary:(NSDictionary*)calloutDict includesSong:(BOOL)hasSong lastUpdate:(NSDate*)lastUpdate;
我在单元测试中调用它。执行此操作时,会出现错误“无法识别的实例发送到选择器”。这对我来说没有任何意义,因此出于好奇,我将所有内容保持不变,并将'nil'作为dictionary参数传入,然后它构建并运行(当然测试失败,但它仍然运行)

有人知道这里发生了什么吗?我不认为在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");

}
谢谢

-马特


另外,我发现的大多数与OCUnit相关的线程通常都涉及到一些据说更好的单元测试框架的建议。我知道他们就在那里,但我不是很感兴趣,除非你有什么不同于GHUnit或Mac的谷歌工具箱。

我不能肯定地说,但我怀疑问题在于OCUnit。基于这样一个事实,即当您为dictionary参数传递nil时,错误就消失了,我猜有问题的消息是在类中的某个地方发送到该dictionary引用的。当字典引用为nil时,它只是吸收消息

顺便说一句,如果你正在寻找一个不同于OCUnit/GHUnit/GTM的测试框架,我建议你去看看;它是BDD风格的测试框架,如Rspec或Jasmine。然而,正如前面提到的,我怀疑测试框架是您的问题