1

ストーリーボードに基づいてアプリケーションをテストしようとしています。シナリオは、View Controller を内部に持つ Navigation Controller です。テストは、セグエを実行すると、ビュー コントローラーが宛先コントローラーとして設定されることです (プッシュ セグエ)。私は 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:

4

1 に答える 1

2

誰が電話し-prepareForSegue:sender:ますか?UIKit が行います。それをテストしようとすることで、UIKit をテストしていることになります — これは不要です。フレームワーク(つまり、あなたにコールバックするもの)を扱うときの基本的なパターンは次のとおりです。

  • フレームワークを正しく呼び出していることを確認してください。
  • フレームワークが正しくコールバックすると仮定します。フレームワークが呼び出すメソッドをテストで直接呼び出すことで、これが発生したと仮定します。
于 2014-06-09T03:25:47.780 に答える