2014-01-05 1 views
1

사용자 정의 셀이 tableView으로 등록되어 있으면 단위 테스트를하고 싶습니다.사용자 정의 셀이 tableView에 등록되어 있는지 어떻게 테스트 할 수 있습니까?

-(void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    UINib *nib = [UINib nibWithNibName:@"FTStatsCellView" bundle:nil]; 
    [[self tableView] registerNib:nib forCellReuseIdentifier:@"FTStatsCellView"]; 
} 

단위 테스트 :

-(void)testIfCustomCellsAreRegisteredToTable 
{ 
    [viewController viewDidLoad]; 
    FTStatsCellView *cell = [[viewController tableView] dequeueReusableCellWithIdentifier:@"FTStatsCellView"]; 
    XCTAssertNotNil(cell, @"Custom cell FTStatsCellView is not registered with the table."); 
} 

테스트는 메시지와 함께 실패합니다

[FTStatsViewControllerTests이 testIfCustomCellsAreRegisteredToTable] 실패 번들에 NIB를로드 할 수 없습니다 : 'NSBundle (로드 됨) '이름이'FTStatsCellView '

어떤 조언이 필요합니까? 감사

내가 프로젝트를 클릭하고 응용 프로그램에 없음에서 test target의 대상을 변경하는 경우, 다음 작동

업데이트.

enter image description here

는하지만이 앱이 시뮬레이터에서 내가 단위 테스트를 실행할 때마다 실행되는 부작용이있다.

enter image description here

어떤 조언을 ?

+1

테스트 대상에 펜촉을 포함 시켰습니까? – Wain

+0

여기에 비슷한 문제가있는 것 같습니다 : http://stackoverflow.com/questions/1879247/why-cant-code-inside-unit-tests-find-bundle-resources하지만 경로를 결합하는 방법을 모르겠다. 'nibWithNibName'. – Houman

+0

xtib 파일이 이미 테스트 대상 멤버십을 확인 했으므로. 그것은 테스트 타겟의'copy bundle resources'에 포함되어 있습니다. 내가 붙어있어 ... – Houman

답변

1

대상을 설정하면 테스트 대상에 BUNDLE_LOADER와 TEST_HOST가 모두 지정됩니다. 단위 테스트를 실행할 때 다음 순서에 필요한 :

  1. 엑스 코드는 시뮬레이터에서 응용 프로그램을 실행을 (또는 장치에,하지만 난 장치에서 단위 테스트 실행되지 않습니다)
  2. 엑스 코드가 실행으로 테스트 대상을 주입을 응용 프로그램
  3. 엑스 코드는
  4. 엑스 코드 앱 종료 모든 테스트를 호출

이 모든 코코아 터치의 상단에 운영 단위 테스트에 필요한 - 특히, 아무것도 뷰 컨트롤러를 포함하는 뷰 계층을로드합니다.

+0

답장에 대해 Jon에게 감사드립니다. 불행히도 그 트릭은 실제로 도움이되지 못했습니다. 이전과 같은 문제입니다.그러나 당신이 질문에 대한 업데이트를 읽을 수 있다면 나는 발견했다. – Houman

+0

나는 이것을 더 강력하게 선언 할 것이다 : _never_는'viewDidLoad'를 호출한다. 런타임에서 사용하는 메소드를 호출하여 객체 수명 기간의 스테이지를보고하는 것은 아닙니다. 뷰 _did_load가 호출되기 때문에 런타임에서'viewDidLoad'를 호출해야합니다. – matt

+0

@matt에게 감사하지만'[viewController view]'도 실제 문제를 해결하지는 못합니다. 업데이트 된 질문을 참조하십시오. – Houman

관련 문제