0

非同期 HTTP get アクションをテストしたい。

@interface Sender : NSObject<NSURLConnectionDataDelegate, NSURLConnectionDelegate>
{
    NSMutableData       *buffer;
    NSString            *_html
}

- (void)getHtml;

@end

@implementation Sender

- (void)getHtml
{
    NSString *urlstr = @"http://www.yahoo.co.jp";
    NSURL *url = [NSURL URLWithString:urlstr];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    NSURLConnection *conn = [NSURLConnection connectionWithRequest:request delegate:self];
    if (conn) {
        buffer = [NSMutableData data];
    } else {
        // error handling
    }
}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
    [buffer appendData:data];
}

-(void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    NSLog(@"Succeed!! Received %d bytes of data", [buffer length]);
    _html = [[NSString alloc] initWithData:buffer encoding:NSUTF8StringEncoding];
    NSLog(@"%@", _html);
}

@end

_html プロパティを許可する必要がありますか?

#import "SenderTestCase.h"
#import "Sender.h"

@implementation SenderTestCase

- (void)setUpClass
{
    sender = [[Sender alloc] init];
}

- (void)testGetHtml
{
    [self prepare];
    [sender getHtml];
    [self performSelector:@selector(_succeedGetHtml) withObject:nil afterDelay:3.0];
    [self waitForStatus:kGHUnitWaitStatusSuccess timeout:4.0];
}

- (void)_succeedGetHtml
{
    if (sender.html != nil) {
        [self notify:kGHUnitWaitStatusSuccess forSelector:@selector(testGetHtml)];
    };
}

@end

もっといい方法があれば教えてください。ご親切にありがとうございました。

4

1 に答える 1

2

あなたはそれを正しくやっています。

コードをより適切に (そして短く) したい場合は、AFNetworking の使用とブロックの使用を検討してください。

私はGHUnit async test exampleを持っています。これは 1 つのメソッド内でうまく表示されます。

于 2012-11-24T18:14:33.847 に答える