OHHTTPSTUBS
Bouchonner vos requêtes réseau facilement!
sans modifier le code de votre application

CocoaHeads Rennes!
20 fé...
OBJECTIF
• Intercepter
• Retourner

les requêtes réseau sortantes!

une réponse toute faite à la place!

•

La requête ne ...
CAS D’USAGE
•

Tests Unitaires
•
•

•

Sans dépendre du réseau ou de la connectivité!
Avec des réponses déterministes et i...
EXEMPLES
• Toutes les requêtes retournent un texte constant

[OHHTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *requ...
EXEMPLES
• Seulement les requêtes vers mywebservice.com!
• Utilisation d’un fichier « .json » (embarqué dans l’application)...
EXEMPLES
• Seulement les requêtes vers mywebservice.com!
• Utilisation d’un NSDictionary converti automatiquement en JSON!...
EXEMPLES
@implementation MyWebService
+ (NSString*)baseURL { return @"http://myserver.tld/webservice/"; }

!

+ (void)fetc...
EXEMPLES
@implementation MyWebService
+ (NSString*)baseURL { return @"http://myserver.tld/webservice/"; }

!

+ (void)fetc...
INSTALLATION
• Sur

GITHub : http://github.com/AliSoftware/OHHTTPStubs!

• Disponible

via CocoaPods!

pod "OHHTTPStubs"

...
Upcoming SlideShare
Loading in...5
×

CocoaHeads Rennes #16: OHHTTPStubs

3,523

Published on

Olivier Halligon nous a présenté sa librairie OHHTTPStubs. Cette dernière permet de bouchonner vos requêtes réseau facilement. Sans modifier le code de votre application. Très utile dans les phases de développement et de test.

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
3,523
On Slideshare
0
From Embeds
0
Number of Embeds
9
Actions
Shares
0
Downloads
6
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

CocoaHeads Rennes #16: OHHTTPStubs

  1. 1. OHHTTPSTUBS Bouchonner vos requêtes réseau facilement! sans modifier le code de votre application CocoaHeads Rennes! 20 février 2014 SmallTalk par O.Halligon
  2. 2. OBJECTIF • Intercepter • Retourner les requêtes réseau sortantes! une réponse toute faite à la place! • La requête ne part finalement pas sur le net! • On se substitue au serveur pour retourner la réponse qu’on veut
  3. 3. CAS D’USAGE • Tests Unitaires • • • Sans dépendre du réseau ou de la connectivité! Avec des réponses déterministes et invariantes. Tests d’asynchronisme en conditions dégradées • • • Simuler un réseau lent! Vérifier que votre application ne gèle pas et affiche des spinners Développement avant la livraison des BackEnds / WS • Développez vos modules d’appel aux WebServices
 même si ceux-ci ne sont pas encore prêts
  4. 4. EXEMPLES • Toutes les requêtes retournent un texte constant [OHHTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) { ! ! } ! ! return YES; withStubResponse:^OHHTTPStubsResponse*(NSURLRequest *request) { }]; NSData* stubData = [@"Hello World!" dataUsingEncoding:NSUTF8StringEncoding]; return [OHHTTPStubsResponse responseWithData:stubData statusCode:200 headers:nil];
  5. 5. EXEMPLES • Seulement les requêtes vers mywebservice.com! • Utilisation d’un fichier « .json » (embarqué dans l’application)! • Headers spécifiques [OHHTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) { ! ! } ! ! return [request.URL.host isEqualToString:@"mywebservice.com"]; withStubResponse:^OHHTTPStubsResponse*(NSURLRequest *request) { }]; return [OHHTTPStubsResponse responseWithFileAtPath:OHPathForFileInBundle(@"wsresponse.json",nil) statusCode:200 headers:@{@"Content-Type":@"text/json"}];
  6. 6. EXEMPLES • Seulement les requêtes vers mywebservice.com! • Utilisation d’un NSDictionary converti automatiquement en JSON! • Simulation d’un temps de réponse [OHHTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) { ! ! } ! ! return [request.URL.host isEqualToString:@"mywebservice.com"]; withStubResponse:^OHHTTPStubsResponse*(NSURLRequest *request) { NSArray* stringList = [request.URL pathComponents]; NSDictionary* dico = @{@"response": stringList, @"error":@NO}; return [[OHHTTPStubsResponse responseWithJSONObject:dico statusCode:200 headers:nil] responseTime:OHHTTPStubsDownloadSpeed3G]; }]; Catégorie OHHTTPStubsResponse+JSON.h! Sérialise le dictionnaire en JSON + rajoute le header «application/json»
  7. 7. EXEMPLES @implementation MyWebService + (NSString*)baseURL { return @"http://myserver.tld/webservice/"; } ! + (void)fetchUserWithID:(int)userID completion:(void(^)(id user))completion { NSURL* baseURL = [NSURL URLWithString:self.baseURL]; AFHTTPSessionManager *sessionManager = [[AFHTTPSessionManager alloc] initWithBaseURL:baseURL]; } @end [sessionManager GET:[NSString stringWithFormat:@"user/%d",userID] parameters:nil success:^(NSURLSessionDataTask *task, id responseObject) { completion(responseObject); } failure:^(NSURLSessionDataTask *task, NSError *error) { completion(nil); }];
  8. 8. EXEMPLES @implementation MyWebService + (NSString*)baseURL { return @"http://myserver.tld/webservice/"; } ! + (void)fetchUserWithID:(int)userID completion:(void(^)(id user))completion { NSURL* baseURL = [NSURL URLWithString:self.baseURL]; AFHTTPSessionManager *sessionManager = [[AFHTTPSessionManager alloc] initWithBaseURL:baseURL]; { [sessionManager GET:[NSString stringWithFormat:@"user/%d",userID] parameters:nil success:^(NSURLSessionDataTask *task, id responseObject) { completion(responseObject); } failure:^(NSURLSessionDataTask *task, NSError *error) { completion(nil); }]; (void)testFetchUser } @end NSDictionary *expectedUser = @{@"id":@123,@"firstname":@"John",@"lastname":@"Appleseed"}; [OHHTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) { return [request.URL.absoluteString hasPrefix:[MyWebService baseURL]]; } withStubResponse:^OHHTTPStubsResponse *(NSURLRequest *request) { return [OHHTTPStubsResponse responseWithJSONObject:expectedUser statusCode:200 headers:nil]; }]; [MyWebService fetchUserWithID:123 completion:^(id user) { STAssertEqualObjects(user, expectedUser, @"Unexpected data received"); [self notifyAsyncOperationDone]; }]; } [self waitForAsyncOperationWithTimeout:1.0];
  9. 9. INSTALLATION • Sur GITHub : http://github.com/AliSoftware/OHHTTPStubs! • Disponible via CocoaPods! pod "OHHTTPStubs" • Fonctionne avec tout framework réseau utilisant l’URL Loading System standard de Cocoa! NSURLConnection, NSURLSession, AFNetworking, …! • Limitations :! • Ne supporte pas les Background Sessions! • Ne bouchonne pas l’upload de données
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×