以前に聞いたことがありますが、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 つの単体テストで実際にカバーされています。
このテストを行うのは良いことですか、それとも他のすべての呼び出しが既にテストされている場合は不要ですか?