XCTest と XCTestExpectation を使用して特定の非同期テストを作成するときに、特定のブロックが実行されなかったことをアサートしたいと思います。次のコードは、ブロックが実行されたことをアサートすることに成功し、そうでない場合、テストは失敗します。
#import <XCTest/XCTest.h>
#import "Example.h"
@interface Example_Test : XCTestCase
@property (nonatomic) Example *example;
@end
@implementation Example_Test
- (void)setUp {
[super setUp];
}
- (void)tearDown {
[super tearDown];
}
- (void)testExampleWithCompletion {
self.example = [[Example alloc] init];
XCTestExpectation *expectation = [self expectationWithDescription:@"expection needs to be fulfilled"];
[self.example exampleWithCompletion:^{
[expectation fulfill]
}];
[self waitForExpectationsWithTimeout:2.0 handler:^(NSError *error) {
if (error) {
NSLog(@"Timeout Error: %@", error);
}
}];
}
これを逆に実行する明確な方法はないようです。ブロックがタイムアウト後に実行されなかった場合はテストが成功し、タイムアウト前に実行された場合は失敗します。これに加えて、後で別の条件が満たされたときにブロックが実行されたと主張したいと思います。
XCTestExpectation でこれを行う簡単な方法はありますか、それとも回避策を作成する必要がありますか?