Wednesday, 8 February 2017

Attente

Je teste un appel asynchrone en utilisant XCTestExpectation. Le code suivant fonctionne (le test réussit) lorsque le completionHandler est exécuté avant le délai donné de 1 seconde. Cependant, si le completionHandler n'est pas appelé, et donc l'attente n'est pas remplie, au lieu d'obtenir un échec de test lors de l'appel waitForExpectationsWithTimeout je reçois un EXCBADACCESS, ce qui n'est pas très pratique car cela rend impossible de voir les résultats de la suite de test ensemble. Comment puis-je éviter cela et obtenir un test normal échec demandé 21 décembre à 15h31 J'ai eu le même problème. Le correctif pour moi semblait être l'augmentation de l'intervalle de temporisation. J'avais à l'origine un intervalle de temps de 1 et l'ai augmenté à 5 juste pour être du côté sûr. Semble fonctionner maintenant. Je ne sais pas combien de temps votre appel async prend, ou si vous pouvez vous permettre un intervalle de temps plus long que 1, mais il vaut un coup. A répondu 24 novembre à 20:14 J'ai essayé cela, dans 50 cas, il a aidé. Vous pouvez voir dans le code que j'ai posté que async est juste dispatchafter qui attend 0.5s. À la fin je suis niling le bloc attendant après attente et faire tout affirme aussi après le bloc d'attente. Donc, rien ne se passe en attendant, mais accomplir. Ndash Micha Hernas Nov 25 14 at 11:18 Swift a le problème spécial de montrer le point de rupture d'exception correct lorsque des fermetures sont présentes dans la même portée. Ive vu le même problème dans un XCTestCase qui a utilisé dispatchafter et même à travers le point d'arrêt d'exception était la même ligne que waitForExpectationsWithTimeout le cas de test se brisait à cause d'un downcast sur un objet nil. Je sais que ce n'est pas votre cas, mais chaque fois que cela se produit je suggère de supprimer les déclarations d'une ligne à la fois et l'exécution du test après chaque retrait. Si le test ne se bloque pas, vous avez identifié le coupable. C'est malheureusement la meilleure option au moment de cette écriture lorsque Swift montre un point d'arrêt d'exception sur une ligne qui n'a pas de sens, en particulier la ligne infâme 0 d'une classe que vous pourriez voir dans les outils de rapports d'incident. Faites-nous savoir si vous avez compris votre accident.


No comments:

Post a Comment