3

OCUnit を使用して IOS5 でアプリケーションをテストしています。私の問題を投稿する前に、ここで関連するすべての投稿をできる限り読みました。本当に助かりました。私は現在、以下の問題に直面しています。できるだけ明確に説明しようとしました。

  1. 私のアプリケーションには、view controller と言うだけのログイン画面があります: initialController. アプリ デリゲートのルート コントローラーはナビゲーション コントローラーです。ナビゲーション コントローラーのプロパティ initWithRootViewController は、この initialController で設定されます。

  2. ログイン後、アプリケーションは別のコントローラーをロードし、このログインプロセスを実行せずにそのコントローラーで単体テストを実行したいと考えています。

  3. ログイン後、別のコントローラは PostloginController が読み込まれると言い、このコントローラのナビゲーション項目はボタン 1 とボタン 2 の 2 つのボタンでカスタマイズされます。これらのボタンは UIBarButtonItem のサブビューとして追加され、この UIBarButtonItem は PostloginController.navigationItem.rightBarButtonItem.(疑似コード) の rightBarButtonItem として設定されます。

  4. 最後に、PostLoginController がナビゲーション コントローラーにプッシュされます。ナビゲーション コントローラー pushviewcontroller:postLoginController.(疑似コード)

  5. ボタン1のUIControlEventTouchUpInsideで別のコントローラーを起動するユニットテストコードを作成する必要があります:Newcontroller. この新しいコントローラーを button1 のイベントにロードすると、1 つのテスト ケースが完了します。

私の問題は、2 つのボタンである UIBarButtonItem のサブビューを取得できないことです。ログは、Navigation Controller に 1 つのコントローラーと 1 つのサブビューしかないことを示しています。私のコードは次のとおりです。

- (void)setUp
{
    [super setUp];    
    // Set-up code here.

    self.appDelegate = (MYAppDelegate*)[[UIApplication sharedApplication] delegate ];
    self.navigationController = (UINavigationController *)self.appDelegate.window.rootViewController;
}

- (void)testAppDelegate
{
    STAssertNotNil(self.appDelegate, @"Cannot find the application delegate");

    NSArray *tempArray = [self.navigationController viewControllers];
    NSLog(@"Number of controllers in navigationController = %i", [tempArray count]);
}

- (void) testButton1
{
    //self.myController = (PostLoginController*)self.navigationController.topViewController;

    UIBarButtonItem *barButtonItem = self.navigationController.topViewController.navigationItem.rightBarButtonItem;

    UIView *customView = barButtonItem.customView;       
    NSArray *subviews1 = customView.subviews;

    NSLog (@ "Got subviews");
    NSLog(@"Number of subviews = %i", [subviews1 count]);

    if ([subviews1 count] == 0)
    {
        NSLog (@ "no subviews");
    }

    for (UIView* view in subviews1)
    {
        NSLog(@"%@", view);

        if([view isKindOfClass:[UIButton class]])
        {
            UIButton *btn = (UIButton*)view;
            NSLog (@ " UIButton parsed");

            // Check if Button1 clicked.
            NSData *data1=UIImagePNGRepresentation([btn backgroundImageForState:UIControlStateNormal]);
            NSData *data2=UIImagePNGRepresentation([UIImage imageNamed:@"BUTTON1.png"]);

            if([data1 isEqualToData:data2])   // CHECKING IF BUTTON1 OR BUTTON2 PRESSED BY IMAGE SINCE THEY DONT HAVE ANY TAGS SET.
            {
                [btn sendActionsForControlEvents:(UIControlEventTouchUpInside)];
                STAssertTrue([self.navigationController.visibleViewController isMemberOfClass: [NewController class]], @" NewController failed to load!"); //BUTTON1 CLICK SHOULD LAUNCH NEWCONTROLLER - COMPLETES ONE TEST CASE.
            }
        }
    }
}
4

0 に答える 0