2016-10-24 12 views
0

私はテストしたいメソッドの1つの中にブロックをモックするのに苦労しています。以下はメソッドのブロックをスタブするOCMock

は私のコードは、今私はtestStartFetchingのような試験方法を持っていると私は、このメソッドをテストしたい

- (void) startFetching:(MyParameter *) parameter 
{ 
    self.fetcher = [[MyFetcher alloc] initWithContext:xxxx andObserver:nil]; 
    self.fetcher.parameters = @[parameter]; 
    [self.fetcher startWithCompleteionBlock:^(id<MyOperation> _Nonnull operation) { 
     if(operation.errors.count > 0) { 
      [self.delegate failedWithError:operation.errors.firstObject]; 
     } else{ 
      FetcherResponse *response = [MyFetcherResponse cast:operation]; 
      NSArray *array = response.responseArray; 
      if(array.count == 1) { 
       [self.delegate completedWithSuccess:array.firstObject]; 
      } 
     } 
    }]; 
} 

のように見え、多かれ少なかれ方法です。私はどのように私はこの部分をスタブすることができないのですか?[self.fetcher startWithCompleteionBlock:^(id<MyOperation> _Nonnull operation)私の方法の中で、成功した場合は適切な配列を返し、エラーの場合はエラーを返し、エラーの場合はスタブするとfailedWithError:operationが呼び出され、そうでなければcompletedWithSuccessが呼び出されます。

私は客観的なcでOCMockフレームワークを使用しています。私は単体テストに新しいです。どんな助力も高く評価されます。

答えて

0

operation(エラーあり)を返す完了ブロックを伴うスタブメソッドです。それから、私はデリゲートのメソッド - failedWithErrorを正しいパラメータ(エラー)で呼び出すことを確認します。

id<MyOperation> operation = [[MyClassOperaion alloc] init]; 
    NSError *error = [NSError new]; 
    operation.errors = @[error]; 

    OCMStub([self.fetcher startWithCompleteionBlock:([OCMArg checkWithBlock:^BOOL(void(^passedBlock)(id<MyOperation> _Nonnull operation)) { 
     passedBlock(operation); 
     return YES; 
    }])]); 

    OCMVerify([self.delegate failedWithError:error]); 
+0

ありがとうございました。このsomeAperationとは何ですか?そして、通過ブロック(someOperation)は何をするのか、それは何を呼びますか? – Madu

+0

@マドゥ私はもっとはっきりと説明しようとしました。まだ不明な点がある場合は教えてください。 –

+0

ありがとうございました。それは私をたくさん助けました。 – Madu

関連する問題