将异步测试辅助程序作为类别添加到 SenTestCase 和 XCTestCase
默认适用于 XCTest
pod 'SHTestCaseAdditions'
pod 'SHTestCaseAdditions/XCTest'
对于 SenTestKit
pod 'SHTestCaseAdditions/SenTestKit'
将此代码添加到特定文件或项目的源代码前缀文件中
XCTestCase
#import <XCTestCase+SHTestCaseAdditions.h>
SenTestKit
#import <SenTestCase+SHTestCaseAdditions.h>
或者
#import "SHTestCaseAdditions.h"
#pragma mark -
#pragma mark Block Definitions
typedef BOOL (^SHTestCaseConditional)();
typedef void (^SHTestCaseBlock)(BOOL *didFinish);
#pragma mark -
#pragma mark Helpers
-(void)SH_waitForTimeInterval:(NSTimeInterval)theTimeInterval;
-(void)SH_runLoopUntilTestPassesWithBlock:(SHTestCaseConditional)theBlock
withTimeOut:(NSTimeInterval)theTimeout;
-(void)SH_performAsyncTestsWithinBlock:(SHTestCaseBlock)theBlock
withTimeout:(NSTimeInterval)theTimeout;
@end
-(void)testSH_waitForTimeInterval; {
__block BOOL assertion = NO;
double delayInSeconds = 5.0;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
assertion = YES;
});
[self SH_waitForTimeInterval:delayInSeconds];
XCTAssertTrue(assertion);
}
-(void)testSH_runLoopUntilTestPassesWithBlock_withTimeOut; {
NSString * keyPath = @"sampleSet";
__block BOOL didPass = NO;
[self SH_addObserverForKeyPaths:@[keyPath] withOptions:0 block:^(id weakSelf, NSString *keyPath, NSDictionary *change) {
didPass = YES;
}];
double delayInSeconds = 2;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
[[self mutableArrayValueForKey:keyPath] addObject:@"Lol"];
});
[self SH_runLoopUntilTestPassesWithBlock:^BOOL{
return didPass;
} withTimeOut:5];
XCTAssertTrue(didPass);
}
-(void)testSH_performAsyncTestsWithinBlock_withTimeout; {
NSString * keyPath = @"sampleArray";
__block BOOL didPass = NO;
[self SH_performAsyncTestsWithinBlock:^(BOOL *didFinish) {
[self SH_addObserverForKeyPaths:@[keyPath] withOptions:0 block:^(id weakSelf, NSString *keyPath, NSDictionary *change) {
didPass = YES;
*didFinish = YES;
}];
double delayInSeconds = 2;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
[[self mutableArrayValueForKey:keyPath] addObject:@"Lol"];
});
} withTimeout:5];
XCTAssertTrue(didPass);
}
如果您在一个项目中使用了 SHTestCaseAdditions,我会很乐意听到您的反馈。
电子邮件:[email protected]
Twitter: @seivanheidari
SHTestCaseAdditions 版权所有© 2013 Seivan,可在MIT 许可证下免费分发。请参阅 LICENSE.md
文件。