2017-07-27 19 views
0

xcode 8.3.3、swiftを使用しています.tearDownメソッドを1回だけ実行しようとしています。swift XCTest tearDownを一度実行する方法

私はここに提供される解決策で一度アプリケーションを起動:tearDownメソッドで XCTestCase not launching application in setUp class method

、私は、アプリケーションからログアウトします。私はこれを一度しかやりたくない。

XCTestのドキュメントは、クラスのティアダウン()メソッドを持っているが、私はそれを使用しようとする - それはもうアプリケーションへのアクセスを持っていない?: https://developer.apple.com/documentation/xctest/xctestcase/understanding_setup_and_teardown_for_test_methods

これは私が午前とき私が得るすべてでありますtearDownメソッドとそれはもうアプリケーション上の任意の要素にアクセスすることはできません。

enter image description here

私はすべてのテストの最後に一度だけティアダウンでコードを実行するにはどうすればよいですか?

+0

:?ちょうどスイート全体を取得するためにclassバージョンを上書き –

+0

現在のXCTestCaseのすべてのテストの後、説明のためにありがとう。 – rfodge

答えて

1

あなたはこの

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

ありがとうございます!この回避策は現在のところ行われます:)私は本当にリンゴが彼らが言うように働く全体的なテストsetUpとtearDownメソッドを提供することを望みます!私がする必要があった唯一の変更は、 "testInvocations.count"の代わりに "self.testInvocations(count)"を使用することでした。 – rfodge

+0

'self'パーツは必要ないと思っていますが、swiftでは' 3. –

0

ようXCTestCaseは、2つの異なるSETUP /ティアダウンの組み合わせを持っている何かを行うことができます。 1つは個別のテストケースレベルです。もう1つはスイートレベルです。すべてのあなたの `XCTestCase`s全体のすべてのテストの終わりか、単に現在の` XCTestCase`におけるテストの終わりを意味します

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

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

こんにちは、私はなぜクラスfuncが私のために働かなかったのかという質問で説明しました。 – rfodge

関連する問題