2016-10-05 5 views
2

@IBOutlets@IBActionを非公開にすることができます。 例:プライベート@IBOutletsと@IBActionsのテスト

class MyViewController: UIViewController { 

    @IBOutlet private weak var myLabel: UILabel! 

    @IBAction private func nextTapped(sender: UIButton) { 
     // Do something 
    } 

} 

我々は良い私の事である、クラスの外このプロパティとメソッドにアクセスしていません。

しかし、プライベートアウトレットとアクションでクラスをテストするのはどうですか? XCTestCaseでプライベートコンセントやメソッドをテストする方法はありますか?それとも、内部クラスを作成するクラスの外部にそれらを公開する必要がありますか?

テスト目的で@IBOutlet s/@IBActionは内部で表示されていますか?

+0

[スイフトユニットのプライベート変数とメソッドのテストの可能な複製](http://stackoverflow.com/questions/37421235/swift-unit-testing-private-variables-and-methods) – Fantattitude

答えて

4

privateの方法をXCTestでテストする方法はありません。

Swiftのprivateは本当にプライベートであり、コンパイラはこの情報を使用してコードを最適化するためです。

メソッドをテストするには、publicまたはinternalのいずれかで、@testableでモジュールをインポートする必要があります。 Should I test private methods or only public ones?から

抜粋:

私はユニットテストのプライベートメソッドはしないでください。プライベートメソッドは、クラスのユーザーに表示されないようにする実装の詳細です。プライベートメソッドをテストすると、カプセル化が中断されます。

+0

プライベートメソッドはアウトされていませんバグを綴る –

0
プライベートメソッドもテストしなければならない

が、ポイントは、テストを実行するために、テスト中のクラスでは何も変更されていません。

デフォルトでは単体テストからIBOutletにアクセスできますが、プライベートとして設定した場合は、テスト対象のクラスの新しいMockSubclassを作成し、プライベートなものを公開することができます。

テストの間、あなたのモックサブクラスをインスタンス化し、あなたのプライベートコンセントを返す関数を呼び出してください。

見てください!モッククラスを常にテストターゲットの下に置いてください。

+0

IBActionとIBOutletで例を共有できますか? –

関連する問題