2014-06-05 4 views
1

스토리 보드를 기반으로 응용 프로그램을 테스트하려고합니다. 시나리오는보기 컨트롤러가있는 내비게이션 컨트롤러입니다. 테스트에서는 segue를 수행하면보기 컨트롤러가 대상 컨트롤러 (push segue)로 설정됩니다. 여기 OCMockito를 사용하고있어 내 테스트입니다 :OCMockito로 스토리 보드를 테스트하는 가장 좋은 방법

MyViewController *mockSut = mock([MyViewController class]); 
UINavigationController *nav = mock([UINavigationController class]); 

[given(mockSut.navigationController) willReturn:nav]; 
[mockSut performSegueWithIdentifier:@"mySegue" sender:nil]; 

MKTArgumentCaptor *segueArgument = [[MKTArgumentCaptor alloc] init]; 
MKTArgumentCaptor *senderArgument = [[MKTArgumentCaptor alloc] init]; 

[verify(mockSut) prepareForSegue:[segueArgument capture] sender:[senderArgument capture]]; 
assertThat([[[segueArgument value] destinationViewController] class], equalTo([MyDestinationViewController class])); 

그러나 prepareForSegue: 메소드가 호출되지 않았 음을 뿌려줍니다.

여기에 문제가 있습니까? 어쩌면 performSegueWithIdentifier:이 비동기 방식으로 prepareForSegue:을 호출합니까?

+0

후안,상은 실제 물건이어야하며 조롱을 받아서는 안됩니다. mock에 대한 테스트를 작성하는 것은 많은 가치를 가져 오지 않습니다. 그리고 그것이 mock이기 때문에 실제 기능을 호출하지 않습니다. –

+0

검증 할 인수가 mock 객체가 아닌 경우 prepareforsegue가 호출되었는지 확인하는 방법을 모르겠습니다. –

답변

2

누가 -prepareForSegue:sender:을 호출합니까? UIKit 않습니다. 테스트를 시도하면 UIKit 테스트가 필요하지 않습니다. 프레임 워크 (다시 말하면 여러분에게 전화하는 것)를 다룰 때 기본 패턴은 다음과 같습니다.

  • 프레임 워크를 올바르게 호출하는지 확인하십시오.
  • 프레임 워크가 올바르게 호출된다고 가정합니다. 테스트가 프레임 워크가 호출 할 메소드를 직접 호출하도록하여 이것이 일어난 것처럼 가장하십시오.