내가 전에 들었고 최근에 Jon Reid's very good screencast, 일부 init
방법 또는 iOS 응용 프로그램에서 배웠던 것처럼 viewDidLoad
방법은 더 커지고 커지는 경향이 있습니다. 이제 그 세 가지 방법이 지금 장치가 테스트되고리팩토링 된 메소드를 테스트하십시오 (여러 메소드로 분리)?
- (void)viewDidLoad {
[super viewDidLoad];
[self setDefaultResourceNames];
[self setupRightBarButtonItems];
[self restoreNavigationControllerHierarchy];
[[NSNotificationCenter defaultCenter] addObserver: (...)];
}
:이 말하기 이름을 가진 다른 방법에 대한 호출을 포함하는 아주 좋은 짧은 방법으로 대체되었다
- (void)viewDidLoad {
// 10+ lines of setting default property
// 20+ lines of setting up the navigation bar
// 20+ lines of resetting the view hierarchy
}
:이 방법을 리팩토링 시도 이전보다 훨씬 나아졌습니다. 이제 내 질문은 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];
}
이 좋은가요를? 이것은 메소드를 호출하여 발생하는 효과보다는 실제 소스 코드와 메소드 실행에 크게 결합되어있는 것 같습니다. (실제로 이것은 단위 테스트가 무엇인지에 관한 것입니다. 그러나이 메서드 호출의 효과는 하위 메서드를 테스트하는 세 가지 단위 테스트에서 실제로 다룹니다.
이 테스트를 수행하는 것이 좋습니까? 아니면 다른 모든 호출이 이미 테스트 중에 있습니까?
실제 앱에서 발생하는 것이 아니기 때문에'viewDidLoad'를 직접 호출하지 마십시오. 그냥 [sut view] 나 [mockSut view]를 호출하면된다. 뷰 객체를 인스턴스화하면 모든 뷰 생성 메소드가 올바른 순서로 진행됩니다. –
힌트를 보내 주셔서 감사합니다! –