1

デリゲートオブジェクトのモックオブジェクトを設定して、URLがnilの場合に、パラメーターとしてnilを使用してデリゲートメソッドが呼び出されることを確認しています。

期待どおりに動作する場合はFileDownloadOperation、テストに合格します。これで問題ありません。

FileDownloadOperationがデリゲートメソッドを呼び出さない場合、テストは期待どおりに失敗します。

しかしFileDownloadOperation、デリゲートメソッドを他の何かで呼び出すと、nil失敗するのではなく、テストがクラッシュし、次のようにOCMockスローされるため、他のテストは実行されません。

'NSInternalInconsistencyException'理由:'OCMockObject [FileDownloadOperationTest]:呼び出された予期しないメソッド:data:<> 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 シミュレーターのバグにより、単体テストは例外をキャッチできず、単純にクラッシュします。

(私は現在、例外に依存しないことでこの問題を回避する新しいモッキング フレームワークを作成しています。)

于 2011-05-07T06:14:26.903 に答える