1

我正在为委托对象设置一个模拟对象,以检查当 URL 为 nil 时,以 nil 作为参数调用委托方法。

FileDownloadOperation行为符合预期时,测试通过,这很好。

FileDownloadOperation不调用委托方法时,测试会按预期失败。

但是,当FileDownloadOperation调用委托方法时nil,不是失败,而是失败,测试崩溃并且没有其他测试被执行,因为OCMockthrows :

'NSInternalInconsistencyException' 原因:'OCMockObject [FileDownloadOperationTest]:调用了意外的方法:数据:<> forURL:nil

  -(void) testNilURL{
      // 1. Create an operation
      FileDownloadOperation * anOp = [[FileDownloadOperation alloc]init];
      // 2. set a nil URL
      anOp.URL = nil;
      // 3. set a mock delegate
      id mockDelegate = [OCMockObject mockForClass:[self class]];
      [[mockDelegate expect] data:[OCMArg isNil] forURL:[OCMArg isNil]];
      anOp.delegate = mockDelegate;
      // 4. launch operation
      [anOp main];
      // 5. ASSERT mock delegate is called with nil data
      STAssertNoThrow([mockDelegate verify], @"Delegate should be called with nil data and nil URL");
      [anOp release];
    }

这是预期的行为吗?还是我做错了什么?谢谢 !

4

1 回答 1

4

OCMock 抛出异常来报告不匹配,信任 OCUnit 来捕获和报告任何异常。但是由于 iOS Simulator 中的一个错误,单元测试无法捕捉到异常,因此简单地崩溃了。

(我目前正在编写一个新的模拟框架,通过不依赖异常来解决这个问题。)

于 2011-05-07T06:14:26.903 回答