使用异步 HTTP 获取操作的 GHUnit 测试

Posted

技术标签:

【中文标题】使用异步 HTTP 获取操作的 GHUnit 测试【英文标题】:GHUnit test with async HTTP get action 【发布时间】:2012-10-15 03:07:44 【问题描述】:

我想测试异步 HTTP 获取操作。

@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

如果有更好的方法,请告诉我。 谢谢你的好意。

【问题讨论】:

【参考方案1】:

你做得对。

如果您希望您的代码更好(更短),请考虑使用 AFNetworking 和使用块。

我有一个GHUnit async test example,它在 1 种方法中显示得很好。

【讨论】:

以上是关于使用异步 HTTP 获取操作的 GHUnit 测试的主要内容,如果未能解决你的问题,请参考以下文章

GHUnit : 测试魔法记录代码

NSManagedObject [GHUnit] 的单元测试

对由 NSTimer 异步发送的 NSNotification 进行单元测试

GHUnit 作为测试包而不是单独的目标

如何使用 GHUnit 测试委托回调

xcode 中的单元测试(使用 GHUnit 和 OCMock)