我與Java大多工作。以下是我在Objective-C中編寫的一些代碼。我的目標是爲「MyService」編寫一些單元測試。僅供參考:此代碼中類的名稱只是一個佔位符。
問題
這個問題似乎是一個合理的做法?我:
- 給予這個類一個單方法(
sharedMyService
) - 聲明一個構造函數注入
NSURLSession
- 結合使用真正的
NSURLSession
我的意圖默認的構造函數:
- 我想通過模擬來測試此代碼
NSURLSession
- 我會注入該
NSURLSession
模擬到這個類來測試它 - 大概瞭解更多關於蘋果的文檔或某個地方,看看如何嘲笑
dataTaskWithURL:
方法。
這裏是頭文件:
#import <Foundation/Foundation.h>
@interface MyService : NSObject
@property(nonatomic, strong, readwrite) NSURLSession *session;
+ (id)sharedMyService;
- (instancetype)initWithURLSession:(NSURLSession *)session;
- (void)fetchData:(NSString*)location;
@end
和實現...
#import "MyService.h"
@implementation MyService
static NSString *const targetUri = @"http://something.com/%@";
+ (instancetype)sharedMyService {
static MyService *service = nil;
@synchronized (self) {
if (service == nil) {
service = [[self alloc] init];
}
}
return service;
}
- (instancetype)initWithURLSession:(NSURLSession *)session {
self = [super init];
if (self) {
self.session = session;
}
return self;
}
- (instancetype)init {
return [self initWithURLSession:[NSURLSession sharedSession]];
}
- (NSURLSession *)getSession {
return self.session;
}
- (void)fetchData:(NSString*)location {
NSURL *targetUrl = [NSURL URLWithString:[NSString stringWithFormat:targetUri, location]];
NSURLSession *urlSession = [self getSession];
NSURLSessionTask *sessionTask = [urlSession dataTaskWithURL:targetUrl completionHandler: ^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
NSLog(@"Request succeeded.");
}];
[sessionTask resume];
}
Thanks @ josh-caswell剛剛檢查了拼寫錯誤的含義:-S – Wain
呵呵,我甚至都不知道這是一個字! :) –