фонПроектирование класс Objective-C, чтобы быть проверяемым
Я работаю в основном с Java. Вот код, который я написал в Objective-C. Моя цель - написать некоторые модульные тесты для «MyService». FYI: имя класса в этом коде является просто заполнителем.
Вопрос
ли это, кажется, как разумный подход? Я:
- Давать этому классу метод одноплодной (
sharedMyService
) - объявляя конструктор для впрыснуть
NSURLSession
- Включает конструктор по умолчанию, который использует реальные
NSURLSession
Мое намерение состоит:
- Я хочу проверить этот код, насмешливый
NSURLSession
- Я бы впрыснуть что
NSURLSession
издеваться в этот класс, чтобы проверить его - Вероятно, далее на документы Apple, или где-нибудь, чтобы посмотреть, как издеваться метод
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];
}
Спасибо @ Josh-Caswell только проверил смысл моей опечатки: -S – Wain
Ха, я даже не знаю, что это было словом! :) –