1

ボタンと以下のメソッドの OCMock 単体テストを作成するにはどうすればよいですか

//This method displays the UIAlertView when Call Security button is pressed. 
-(void) displayAlertView
{
     UIAlertView *callAlert = [[UIAlertView alloc] initWithTitle:@"Call Security" message:@"(000)-000-0000" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Call", nil];
     [callAlert show];
     if([[callAlert buttonTitleAtIndex:1] isEqualToString:@"Call"])
     {
          [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"telprompt://0000000000"]];
     }
}
//This Button calls the above method.
-(IBAction)callSecurityButton 
{
     [self displayAlertView];
}

これまでにこれを実装しましたが、このエラーが発生しました:

OCMockObject[UIAlertView]: 予期されるメソッドが呼び出されませんでした: 表示:

これは私が書いたテストケースです

-(void)testDisplayAlertView
{
    OCMockObject *UIAlertViewMock = [OCMockObject mockForClass:[UIAlertView class]];
    [[UIAlertViewMock expect] show];
    [self.shuttleHelpViewController displayAlertView];
    [UIAlertViewMock verify];
}

これまでにこれを実装しましたが、このエラーが発生しました:

OCMockObject[UIAlertView]: 予期されるメソッドが呼び出されませんでした: 表示:

4

1 に答える 1

3

メソッド内で作成されたモックオブジェクトとオブジェクトは同じではありません。次のようになります。

//This method displays the UIAlertView when Call Security button is pressed. 
-(void)displayAlertView:(UIAlertView *)callAlert
{
    [callAlert show];
    if([[callAlert buttonTitleAtIndex:1] isEqualToString:@"Call"])
    {
         [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"telprompt://0000000000"]];
    }
}

//This Button calls the above method.
-(IBAction)callSecurityButton 
{
    UIAlertView *callAlert = [[UIAlertView alloc] initWithTitle:@"Call Security" message:@"(000)-000-0000" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Call", nil];
    [self displayAlertView:callAlert];
}

そしてテスト方法:

-(void)testDisplayAlertView
{
    OCMockObject *UIAlertViewMock = [OCMockObject mockForClass:[UIAlertView class]];
    [[UIAlertViewMock expect] show];
    [self.shuttleHelpViewController displayAlertView:UIAlertViewMock];
    [UIAlertViewMock verify];
}
于 2013-08-07T09:25:16.550 に答える