Dans un projet que je travaille, j'ai implémenté l'exemple HTTP Manager Reachability.Echec de la surveillance avec AFNetworking dans le test unitaire
Quand je lance l'application réelle , il va à l'intérieur du bloc et de là au commutateur:
[manager.reachabilityManager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
switch (status) {
En outre, quand je l'appelle ...reachabilityManager] isReachable
méthode renvoie true comme prévu.
Le problème se produit lorsque je tente de test unitaire une méthode de classe, j'ai écrit que les utilisations ...reachabilityManager] isReachable
comme une condition préalable - il retourne faux et ce qui est bizarre que lors d'un débogage je l'ai remarqué qu'il ne va pas à l'intérieur ce qui précède bloc, il le saute.
Bien sûr, dans l'application réelle, il va à l'intérieur du bloc.
J'ai même essayé de se moquer de la classe qui implémente l'exemple HTTP Manager joignabilité utilisant OCMock dans le test unitaire, mais il m'a donné le même résultat:
// NetworkClass implements the example
NetworkClass *networkClass = [[NetworkClass alloc] init];
id mockedNetworkClass = OCMPartialMock(networkClass);
// startNetworkMonitoring method implements the whole example above
[mockedNetworkClass startNetworkMonitoring];
// Giving enough time for AFNetworking to finish
[NSThread sleepForTimeInterval:60.0f];
EDIT1:
Ressemble sémaphore/XCTestExpectation ne va pas aider, le problème est en AFNetworkReachabilityManager :: startMonitoring:
- La seule façon que nous pourrions obtenir le rappel que nous voulons est à l'intérieur méthode startMonitoring à
dispatch_async(dispatch_get_main_queue(), ^{ callback(status);
Mais il fonctionne en dehors du test unitaire, même si nous utilisons sémaphores/XCTestExpectation comme mentionné.
Toujours à la recherche soultions ..
EDIT2:
je tentais de suivre le objc.io pour tester le code asynchrone mais il semble manquer un peu de code et quelques-unes des explications manquent des détails d'intégration.
Je ne suis pas sûr de ce que vous réessayer de tester, mais peut-être que vous pourriez capturer le bloc de changement d'état et l'exécuter avec différents paramètres pour différents cas de test. Cela aurait-il un sens pour vous? –
En fait non. Comme je l'ai écrit, j'essaie de tester une méthode qui fait quelque chose mais la condition préalable à cette méthode est la méthode isReachable et c'est le problème. – OhadM
Et si vous vous moquez de 'manager.reachabilityManager' et stub la méthode' isReachable' pour retourner YES toujours.Cela vous permettrait de faire vos tests. Notez qu'en utilisant réellement l'objet Reachability, vous introduisez une dépendance dans votre test. –