XCode中的单元测试:测试装置'[...] / usr / bin / otest'异常退出,代码为134

时间:2011-02-17 18:00:39

标签: xcode unit-testing

单元测试课时遇到问题。在运行我的测试时,它编译时没有任何错误,但随后崩溃(在断言未被满足的意义上它不会失败),显示以下错误消息:

/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 1similar problem 2)这似乎是XCode中的一个错误,但这些链接指向使用核心数据(我没有)或OCMock时出现的问题(我不这样做 - 至少不是故意的)。

有人能告诉我如何解决这类问题吗?如果它被证明是一个错误,那么非常感谢一种解决方法。

1 个答案:

答案 0 :(得分:3)

开始使用OCUnit时我也遇到了这个问题。这是因为尝试执行在逻辑测试模式下设置的测试,而不是应用程序测试模式。如果测试中的代码对Cocoa或Cocoa Touch有一定的依赖性,则必须在为应用程序测试设置目标的情况下运行此代码。

测试运行器本身崩溃的事实看起来像是一个xcode错误,因为AppCode将继续通过这一点。

设置这些测试的一个很好的来源是here