0

J'utilise xcode 8.3.3, swift, et j'essaye d'obtenir la méthode tearDown à exécuter une seule fois.Comment faire pour exécuter rapide XCTest tearDown une fois

je lance l'application une fois avec la solution fournie ici: XCTestCase not launching application in setUp class method

Dans la méthode tearDown, je veux vous déconnecter de l'application. Je veux seulement faire ça une fois.

La documentation XCTest a une méthode, mais lorsque je tente de l'utiliser tearDown de classe() - il n'a pas accès à l'application plus ?: https://developer.apple.com/documentation/xctest/xctestcase/understanding_setup_and_teardown_for_test_methods

C'est tout ce que je reçois quand je suis en la méthode tearDown et il ne peut donc pas accéder à tous les éléments sur l'application plus:

enter image description here

Comment puis-je exécuter le code dans le tearDown juste une fois à la fin de tous les tests?

+0

Voulez-vous dire à la fin de tous les tests effectués dans tous vos 'XCTestCase's ou juste à la fin des essais dans le' XCTestCase' actuel? –

+0

Après tous les tests dans le XCTestCase actuel, merci pour la clarification. – rfodge

Répondre

1

Vous pouvez faire quelque chose comme ça

import XCTest 

class TestSuite: XCTestCase { 

    static var testCount = testInvocations.count 

    override func setUp() 
    { 
     super.setUp() 

     TestSuite.testCount -= 1 
    } 

    override func tearDown() 
    { 
     if TestSuite.testCount == 0 { 
      print("Final tearDown") 
     } 

     super.tearDown() 
    } 

    func testA() {} 
    func testB() {} 
    func testC() {} 
} 
+0

Merci! Cette solution de contournement fonctionnera pour l'instant :) Je souhaite vraiment qu'Apple fournisse des méthodes d'ensemble de test et de tearDown qui fonctionnent comme ils disent! Le seul changement que je devais faire était d'utiliser "self.testInvocations(). Count" au lieu de "testInvocations.count" – rfodge

+0

Je ne pense pas que vous ayez besoin de la partie 'self' mais le'() 'pourrait encore être nécessaire dans swift 3. –

0

XCTestCase a deux différentes combinaisons setUp/tearDown. L'un est au niveau du scénario de test individuel. L'autre est au niveau de la suite. Il suffit de remplacer les versions class pour obtenir toute la suite:

override class func setUp() { 
    super.setUp() 
    // Your code goes here 
} 

override class func tearDown() { 
    // Your code goes here 
    super.tearDown() 
} 
+0

Bonjour, j'ai expliqué dans la question pourquoi la fonction func ne fonctionnait pas pour moi. – rfodge