4

以前に聞いたことがありますが、Jon Reid の非常に優れたスクリーンキャスト、いくつかのinitメソッド、または iOS アプリケーションで最近知ったように、viewDidLoadメソッドはますます大きくなる傾向があります。このメソッドをリファクタリングしようとしました:

- (void)viewDidLoad {
    // 10+ lines of setting default property

    // 20+ lines of setting up the navigation bar

    // 20+ lines of resetting the view hierarchy
}

これは、話し言葉で他のメソッドへの呼び出しを含む非常に優れた短いメソッドに置き換えられました。

- (void)viewDidLoad {
    [super viewDidLoad];

    [self setDefaultResourceNames];
    [self setupRightBarButtonItems];
    [self restoreNavigationControllerHierarchy];

    [[NSNotificationCenter defaultCenter] addObserver: (...)];

}

現在、これら 3 つのメソッドの単体テストが行​​われており、以前よりもはるかに優れています。今私の質問は、viewDidLoadメソッドもテストする必要がありますか?

これを行うために、テスト対象のクラスから部分的なモックを作成し、次のテストを作成しました。

- (void)testViewDidLoadShouldInstantiateControllerCorrectly {
    NewsItemDetailsViewController *sut = [[NewsItemDetailsViewController alloc] init];
    id mockSut = [OCMockObject partialMockForObject:sut];
    [[mockSut expect] setDefaultResourceNames];
    [[mockSut expect] setupRightBarButtonItems];
    [[mockSut expect] restoreNavigationControllerHierarchy];

    [mockSut viewDidLoad];

    [mockSut verify];
}

これでいいの?これは、メソッドを呼び出すことによって引き起こされる効果ではなく、実際のソース コードとメソッドの実行に大きく関係しているようです (私が学んだ限りでは、これは実際に単体テストに関するものです)。ただし、メソッドを呼び出す効果は、サブメソッドをテストする 3 つの単体テストで実際にカバーされています。

このテストを行うのは良いことですか、それとも他のすべての呼び出しが既にテストされている場合は不要ですか?

4

2 に答える 2

1

何をテストしているかによって異なります。ここには一般的な解決策はありません。あなた自身の専門的な判断に基づいて決定を下す必要があります。

この場合、制御フローをテストしたり、回帰セーフティ ネットを提供したりすることは有益ですか? メリットはコストを上回っていますか?

一貫性を保つために嘲笑することはお勧めできません。ほとんどの場合、有害であることが証明されています。実際に必要な場所で、ツールとして使用してください。

于 2013-01-20T17:20:44.157 に答える
1

これは完全に合理的なアプローチです。2 種類のものをテストする必要があります。1) 壊したくないもの、および 2) 文書化したいものです。このアプローチがこれらの基準のいずれかまたは両方に適合する場合は問題ありません。

このようなテストの主な欠点は、自明なことに多くのコーディング オーバーヘッドが追加される可能性があることだと思います。多くの場合、ビューのセットアップ コードは非常に読みやすくなっています。ざっと目を通し、何が起こっているのかを理解することができるため、テストを行ってもドキュメントとしての価値はあまりありません。また、ビューがアプリを使用するたびに使用するものである場合、ビューのセットアップのいずれかが壊れていても、QA を行うとすぐに明らかになる可能性があるため、テストは防御的なコーディングの価値をあまり追加しません。

最終的に、このコードを保守し、壊れた場合に修正する責任を負うのはあなたです。そのため、テスト作業が後でリスクを上回るかどうかを判断するのはあなた次第です。

于 2013-01-22T20:20:51.090 に答える