単体テストを学習しようとしています。以下は、サーバーから返された文字列を比較するための、初めて書いた単体テストです。インターネット接続の可用性と nsnotification を処理した方法が完全ではないことは確かです。テスト testGetURLEncodedString は、assert ステートメントがないため、常に pass を出力しました。応答を受信した後にサーバーから返された結果を比較する必要があるため、assert をそこに置くことはできません。誰でもこれを行う正しい方法を教えてください。
#import "MyAppTests.h"
@interface MyAppTests()
@property(nonatomic) AppDelegate *delegate;
@end
@implementation MyAppTests
@synthesize delegate = _delegate;
- (void)setUp
{
[super setUp];
self.delegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
if(![self.delegate internetConnectionAvailable])
{
STFail(@"Internet is not reachable.");
exit(-1);
}
}
- (void)tearDown
{
_delegate = nil;
[super tearDown];
}
- (void)testDelegate
{
STAssertNotNil(self.delegate, @"Cannot find the application delegate");
}
- (void)testGetURLEncodedString
{
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(getURLEncodedStringSuccess:) name:@"getURLEncodedStringSuccess" object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(getURLEncodedStringFailed:) name:@"getURLEncodedStringFailed" object:nil];
[self.delegate getURLEncodedString:@"Testing Text"];
}
-(void)getURLEncodedStringSuccess:(NSNotification *)notification
{
[[NSNotificationCenter defaultCenter] removeObserver:self name:@"getURLEncodedStringSuccess" object:nil];
[[NSNotificationCenter defaultCenter] removeObserver:self name:@"getURLEncodedStringFailed" object:nil];
STAssertTrue([[self.delegate getURLEncodedStringResponse] isEqualToString:@"Testing Text"], @"testGetURLEncodedString failed - did not receive expected response");
}
-(void)getURLEncodedStringFailed:(NSNotification *)notification
{
[[NSNotificationCenter defaultCenter] removeObserver:self name:@"getURLEncodedStringSuccess" object:nil];
[[NSNotificationCenter defaultCenter] removeObserver:self name:@"getURLEncodedStringFailed" object:nil];
STFail(@"testGetURLEncodedString failed - server failed returning result");
}