0

Ich benutze xcode 8.3.3, swift, und ich versuche, die tearDown-Methode nur einmal ausgeführt werden.Wie schnell swift XCTest trineDown einmal

ich starten Sie die Anwendung einmal mit der Lösung, die hier zur Verfügung gestellt: XCTestCase not launching application in setUp class method

Im tearDown Verfahren möchte ich von der Anwendung abzumelden. Ich will das nur einmal machen.

Die XCTest Dokumentation hat eine Klasse tearDown() -Methode, aber wenn ich versuche, es zu benutzen - es hat keinen Zugriff auf die Anwendung mehr ?: https://developer.apple.com/documentation/xctest/xctestcase/understanding_setup_and_teardown_for_test_methods

Das ist alles, was ich bekomme, wenn ich bin in die tearDown Methode und so kann es keine Elemente auf die Anwendung zugreifen mehr:

enter image description here

Wie kann ich den Code in der tearDown nur einmal am Ende aller Tests laufen?

+0

Sie am Ende aller Tests in allen Ihren 'XCTestCase's bedeuten Sie oder einfach nur am Ende der Tests im aktuellen' XCTestCase'? –

+0

Nach allen Tests im aktuellen XCTestCase, danke für die Klärung. – rfodge

Antwort

1

Sie können etwas tun, wie diese

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

Danke! Diese Workaround wird für jetzt tun :) Ich wünschte wirklich Apple würde insgesamt Test SetUp und TearDown Methoden, die funktionieren, wie sie sagen, dass sie tun! Die einzige Änderung, die ich tun musste, war "self.testInvocations(). Count" anstelle von "testInvocations.count" – rfodge

+0

Ich glaube nicht, dass Sie den 'self' Teil brauchen, aber das'() 'könnte immer noch in swift benötigt werden 3. –

0

XCTestCase hat zwei verschiedene Setup/Teardown-Kombinationen. Einer ist auf der individuellen Testfallebene. Das andere ist auf Suite-Ebene. außer Kraft setzen Sie einfach die class Versionen die gesamte Suite zu bekommen:

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

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

Hallo, ich habe in der Frage erklärt, warum die Klasse func für mich nicht funktioniert hat. – rfodge

Verwandte Themen