单元测试课时遇到问题。在运行我的测试时,它编译时没有任何错误,但随后崩溃(在断言未被满足的意义上它不会失败),显示以下错误消息:
/Developer/Tools/RunPlatformUnitTests.include:451:0 Test rig '/Developer/Platforms
/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.2.sdk/Developer/usr/bin/otest'
exited abnormally with code 134 (it may have crashed).
这是我的代码:
班级界面:
@interface AbstractActionModel : NSObject
{
NSString* mName;
ActionType mType; // enum
float mDuration;
float mRepeatCount;
float mDelay;
NSArray* mTriggerAreas;
}
实施:
- (void) dealloc
{
[mTriggerAreas release];
[super dealloc];
}
- (id) initWithConfigData: (NSDictionary*) theConfigData
{
NSAssert(nil != theConfigData, @"theConfigData cannot be nil");
self = [super init];
if (self)
{
self.name = [theConfigData objectForKey:ACTION_NAME];
self.type = [[theConfigData objectForKey:ACTION_TYPE] intValue];
self.duration = [[theConfigData objectForKey:ACTION_DURATION] floatValue];
self.delay = [[theConfigData objectForKey:ACTION_DELAY] floatValue];
self.repeatCount = [[theConfigData objectForKey:ACTION_REPEAT_COUNT] floatValue];
self.triggerAreas = [theConfigData objectForKey:ACTION_TRIGGER_AREAS];
}
return self;
}
这是测试代码:
- (void) testCreateAction
{
SoundActionModel* testSoundAction = (SoundActionModel*)[SoundActionModelFactory createActionModel:self.actionConfig];
STAssertNotNil(testSoundAction, @"returned object must not be nil");
}
工厂的createActionModel:
方法:
+ (AbstractActionModel*) createActionModel:(NSDictionary *)config
{
NSAssert(config != nil, @"config must not be nil");
SoundActionModel* retVal = [[[SoundActionModel alloc] initWithConfigData:config] autorelease];
return retVal;
}
如前所述:代码编译,并在testCreateAction
被注释掉时运行。这个问题似乎不是测试本身(即它的断言)。
从这些帖子中讲述(similar problem 1,similar problem 2)这似乎是XCode中的一个错误,但这些链接指向使用核心数据(我没有)或OCMock时出现的问题(我不这样做 - 至少不是故意的)。
有人能告诉我如何解决这类问题吗?如果它被证明是一个错误,那么非常感谢一种解决方法。
答案 0 :(得分:3)
开始使用OCUnit时我也遇到了这个问题。这是因为尝试执行在逻辑测试模式下设置的测试,而不是应用程序测试模式。如果测试中的代码对Cocoa或Cocoa Touch有一定的依赖性,则必须在为应用程序测试设置目标的情况下运行此代码。
测试运行器本身崩溃的事实看起来像是一个xcode错误,因为AppCode将继续通过这一点。
设置这些测试的一个很好的来源是here