2017-01-12 7 views
0

私がテストしている関数が呼び出されたときに変数をtrueに設定するSwiftの模擬例に従っていますが、わからないのは、サブクラスではモックであり、それからメソッドの親のレンディションを返します。私はオーバーライドの仕方を想定していました。私たちが望むロジックで関数を書き直すことを前提としていました。私たちがこれを行ったとき、元の関数を格納している親クラスは、ここでSwiftのモックからスーパーを呼び出す

はサンプルコードです:

extension ItemListDataProviderTests{ 
class MockTableView: UITableView { 
    var cellGotDequeued = false 


    override func dequeueReusableCell(withIdentifier identifier: String, for indexPath: IndexPath) -> UITableViewCell { 

     cellGotDequeued = true 

     return super.dequeueReusableCell(withIdentifier: identifier, for: indexPath) 

    } 
} 

はどのようにオーバーライドされた関数を呼び出すとtrueにテスト変数を設定し、親メソッドを返すのですか?スーパーを呼び出すことによって、親のロジックを実行し、子のオーバーライドされたメソッドを起動しないと仮定しました。

+1

私はこのコードを知っていると思います。 :) 驚くばかり! – dasdom

+0

確かに! 2回目にあなたの本を読んで、テストを書くことでOOPをよく理解してください。とても良いです。 –

答えて

1

あなたはtrue

    1. セットcellGotDequeuedを示してきた方法は、親クラス(ない "実装dequeueReusableCell
    2. の実装はは、親クラスから返さ結果を返す呼び出し、親の方法の演出」)

    あなたは正しいですか?彼は親クラスは子クラスがこのメソッドをどのようにオーバーライドしたかについて全く知らない。

    superを呼び出すと、親クラスの実装が呼び出されますが、子クラスの実装時には実行されますが、子の実装が実行されることはありません。子クラスの使用であるsuperは、親実装が呼び出されるべきかどうかを判断し、親実装が呼び出されるべきかどうかを決定します。

  • 関連する問題