1

単純なインターフェイスを備えたUIViewControllerを使用している場合の例を考えてみましょう。

@interface MainViewController : UIViewController
@end

viewDidLoadまたはviewDidAppearメッセージを受信すると、追加のビューを作成して配置します。

ユニットテストを行うときは、これらのビューをモックアップしたいので、インターフェイスを次のように変更する必要があります。

@interface MainViewController : UIViewController

@property (nonatomic) UIView *additionalView1
@property (nonatomic) UIView *additionalView2

@end

これを行うことにより、私は追加のビューを作成する責任を呼び出し側に移します。これは、私の意見では、カプセル化を破ります。

どうすればコントローラー内部の多くを公開しないようにできますか?

4

1 に答える 1

2

セッター注入をサポートするには、実際に公開する必要があります。

それを非表示にしたり、立ち入り禁止としてマークしたりする方法があります。プロパティ宣言を でラップできます#if DEBUG。または、それらを MainViewController_Private のクラス拡張に移動できます。

しかし、これらのトリックはコードのノイズを増やすだけであることがわかりました。したがって、私のアプローチは、先に進んでそれらを公開することです。Testability、Information Hiding、および Class Trying to Get Outで指摘したように、このような露出は、クラスを抽出する必要があるか、または責任をシフトする必要があるかもしれないという手がかりになる可能性があります。たとえば、これらのビューを挿入したい場合、MainViewController で実際にビューを作成する必要がありますか? 多分緊張が、MainViewController がこれらのビューの詳細を知らないままにして、ファクトリを作成するように導いているのでしょう。

于 2013-02-15T17:18:05.757 に答える