2

完了ブロックまたは失敗したブロックのいずれかを呼び出す必要があるメソッドの単体テストがあります。これで、どのケースを呼び出す必要があるかがわかったのでSTFail、呼び出してはならないブロックで使用します。

呼び出されるべきブロックが実際に呼び出されたことをテストするにはどうすればよいですか?

これは私のセットアップです:

NSString *parameter = @"foo";
[controller doSomethingWithParameter:parameter withcompletionBlock: 
^(NSString *result)
{
    // This block should be invoked
    // Check if the result is correct
    STAssertEquals(result, kSomeOKConstant, @"Result shout be 'kSomeOKConstant'");
} failedBlock:
^(NSString *errorMessage) {
    STFail(@"No error should happen with parameter '%@'",parameter);
}];
4

1 に答える 1

3

ブロック変数を追加して、ブロック内から設定する必要があります。

BOOL __block successBlockInvoked = NO;
BOOL __block failureBlockInvoked = NO;
NSString *parameter = @"foo";
[controller doSomethingWithParameter:parameter withcompletionBlock: 
^(NSString *result) {
     successBlockInvoked = YES;
     STAssertEquals(result, kSomeOKConstant, @"Result shout be 'kSomeOKConstant'");
} failedBlock:
^(NSString *errorMessage) {
    failureBlockInvoked = YES;
    STFail(@"No error should happen with parameter '%@'",parameter);
}];

この時点で、successBlockInvokedとの値についてアサーションを行うことができfailureBlockInvokedます。期待される値が設定されていない場合、テストは失敗しています。

于 2012-01-27T10:46:46.717 に答える