ios 单元测试
Demo:参考ASIHttpRequest的示例
例如:PerformanceTest
#import <Foundation/Foundation.h>
#import "ASITestCase.h"
@interface PerformanceTests : ASITestCase {
NSURL *testURL;
NSDate *testStartDate;
int requestsComplete;
NSMutableArray *responseData;
unsigned long bytesDownloaded;
}
- (void)testASIHTTPRequestAsyncPerformance;
- (void)testNSURLConnectionAsyncPerformance;
@property (retain,nonatomic) NSURL *testURL;
@property (retain,nonatomic) NSDate *testStartDate;
@property (assign,nonatomic) int requestsComplete;
@property (retain,nonatomic) NSMutableArray *responseData;
@end
#import "PerformanceTests.h"
#import "ASIHTTPRequest.h"
// IMPORTANT - these tests need to be run one at a time!
@interface NSURLConnectionSubclass : NSURLConnection {
int tag;
}
@property (assign) int tag;
@end
@implementation NSURLConnectionSubclass
@synthesize tag;
@end
// Stop clang complaining about undeclared selectors
@interface PerformanceTests ()
- (void)runSynchronousASIHTTPRequests;
- (void)runSynchronousNSURLConnections;
- (void)startASIHTTPRequests;
- (void)startASIHTTPRequestsWithQueue;
- (void)startNSURLConnections;
@end
@implementation PerformanceTests
- (void)setUp
{
[self setTestURL:[NSURL URLWithString:@"http://allseeing-i.com/ASIHTTPRequest/tests/the_great_american_novel_%28abridged%29.txt"]];
//[self setTestURL:[NSURL URLWithString:@"http://allseeing-i.com"]];
}
- (void)testASIHTTPRequestSynchronousPerformance
{
[self performSelectorOnMainThread:@selector(runSynchronousASIHTTPRequests) withObject:nil waitUntilDone:YES];
}
- (void)runSynchronousASIHTTPRequests
{
int runTimes = 10;
NSTimeInterval times[runTimes];
int i;
for (i=0; i<runTimes; i++) {
NSDate *startTime = [NSDate date];
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:testURL];
//Send the same headers as NSURLRequest
[request addRequestHeader:@"Pragma" value:@"no-cache"];
[request addRequestHeader:@"Accept" value:@"*/*"];
[request addRequestHeader:@"Accept-Language" value:@"en/us"];
[request startSynchronous];
if ([request error]) {
NSLog(@"Request failed - cannot proceed with test");
return;
}
times[i] = [[NSDate date] timeIntervalSinceDate:startTime];
}
NSTimeInterval bestTime = 1000;
NSTimeInterval worstTime = 0;
NSTimeInterval totalTime = 0;
for (i=0; i<runTimes; i++) {
if (times[i] < bestTime) {
bestTime = times[i];
}
if (times[i] > worstTime) {
worstTime = times[i];
}
totalTime += times[i];
}
NSLog(@"Ran %i requests in %f seconds (average time: %f secs / best time: %f secs / worst time: %f secs)",runTimes,totalTime,totalTime/runTimes,bestTime,worstTime);
}
- (void)testNSURLConnectionSynchronousPerformance
{
[self performSelectorOnMainThread:@selector(runSynchronousNSURLConnections) withObject:nil waitUntilDone:YES];
}
- (void)runSynchronousNSURLConnections
{
int runTimes = 10;
NSTimeInterval times[runTimes];
int i;
for (i=0; i<runTimes; i++) {
NSDate *startTime = [NSDate date];
NSURLResponse *response = nil;
NSError *error = nil;
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:testURL cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:10];
[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
if (error) {
NSLog(@"Request failed - cannot proceed with test");
return;
}
times[i] = [[NSDate date] timeIntervalSinceDate:startTime];
}
NSTimeInterval bestTime = 1000;
NSTimeInterval worstTime = 0;
NSTimeInterval totalTime = 0;
for (i=0; i<runTimes; i++) {
if (times[i] < bestTime) {
bestTime = times[i];
}
if (times[i] > worstTime) {
worstTime = times[i];
}
totalTime += times[i];
}
NSLog(@"Ran %i requests in %f seconds (average time: %f secs / best time: %f secs / worst time: %f secs)",runTimes,totalTime,totalTime/runTimes,bestTime,worstTime);
}
- (void)testASIHTTPRequestAsyncPerformance
{
[self performSelectorOnMainThread:@selector(startASIHTTPRequests) withObject:nil waitUntilDone:NO];
}
- (void)testQueuedASIHTTPRequestAsyncPerformance
{
[self performSelectorOnMainThread:@selector(startASIHTTPRequestsWithQueue) withObject:nil waitUntilDone:NO];
}
- (void)startASIHTTPRequests
{
bytesDownloaded = 0;
[self setRequestsComplete:0];
[self setTestStartDate:[NSDate date]];
int i;
for (i=0; i<10; i++) {
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:testURL];
//Send the same headers as NSURLRequest
[request addRequestHeader:@"Pragma" value:@"no-cache"];
[request addRequestHeader:@"Accept" value:@"*/*"];
[request addRequestHeader:@"Accept-Language" value:@"en/us"];
[request setDelegate:self];
[request startAsynchronous];
}
}
- (void)startASIHTTPRequestsWithQueue
{
bytesDownloaded = 0;
[self setRequestsComplete:0];
[self setTestStartDate:[NSDate date]];
int i;
NSOperationQueue *queue = [[[NSOperationQueue alloc] init] autorelease];
[queue setMaxConcurrentOperationCount:4];
for (i=0; i<10; i++) {
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:testURL];
//Send the same headers as NSURLRequest
[request addRequestHeader:@"Pragma" value:@"no-cache"];
[request addRequestHeader:@"Accept" value:@"*/*"];
[request addRequestHeader:@"Accept-Language" value:@"en/us"];
[request setUseCookiePersistence:NO];
[request setUseSessionPersistence:NO];
[request setDelegate:self];
[queue addOperation:request];
}
}
- (void)requestFailed:(ASIHTTPRequest *)request
{
GHFail(@"Cannot proceed with ASIHTTPRequest test - a request failed");
}
- (void)requestFinished:(ASIHTTPRequest *)request
{
bytesDownloaded += [[request responseData] length];
requestsComplete++;
if (requestsComplete == 10) {
NSLog(@"ASIHTTPRequest: Completed 10 (downloaded %lu bytes) requests in %f seconds",bytesDownloaded,[[NSDate date] timeIntervalSinceDate:[self testStartDate]]);
}
}
- (void)testNSURLConnectionAsyncPerformance
{
[self performSelectorOnMainThread:@selector(startNSURLConnections) withObject:nil waitUntilDone:NO];
}
- (void)startNSURLConnections
{
bytesDownloaded = 0;
[self setRequestsComplete:0];
[self setTestStartDate:[NSDate date]];
[self setResponseData:[NSMutableArray arrayWithCapacity:5]];
int i;
for (i=0; i<10; i++) {
NSURLRequest *request = [NSURLRequest requestWithURL:testURL cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:10];
[[self responseData] addObject:[NSMutableData data]];
NSURLConnectionSubclass *connection = [[[NSURLConnectionSubclass alloc] initWithRequest:request delegate:self startImmediately:YES] autorelease];
[connection setTag:i];
}
}
- (void)connection:(NSURLConnectionSubclass *)connection didReceiveResponse:(NSURLResponse *)response
{
}
- (void)connection:(NSURLConnectionSubclass *)connection didFailWithError:(NSError *)error
{
GHFail(@"Cannot proceed with NSURLConnection test - a request failed");
}
- (void)connection:(NSURLConnectionSubclass *)connection didReceiveData:(NSData *)data
{
[[[self responseData] objectAtIndex:[connection tag]] appendData:data];
}
- (void)connectionDidFinishLoading:(NSURLConnectionSubclass *)connection
{
bytesDownloaded += [[responseData objectAtIndex:[connection tag]] length];
requestsComplete++;
if (requestsComplete == 10) {
NSLog(@"NSURLConnection: Completed 10 (downloaded %lu bytes) requests in %f seconds",bytesDownloaded,[[NSDate date] timeIntervalSinceDate:[self testStartDate]]);
}
}
@synthesize testURL;
@synthesize requestsComplete;
@synthesize testStartDate;
@synthesize responseData;
@end

浙公网安备 33010602011771号