我已经使用 iPhone SDK 版本 3.1.2 成功为 XCode 版本 3.2.2 项目设置了单元测试。
我创建了一个类“Callout”,我试图在单元测试的上下文中实例化它。该类有一个方法,
-(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");
}
谢谢!
-马特
PS - 我发现的与 OCUnit 相关的大多数线程通常都包含一些据称更好的单元测试框架的建议。我知道它们就在那里,但我并不真正感兴趣,除非你有与 GHUnit 或 Mac 版 Google 工具箱不同的东西。