2

iOS プロジェクト用に OCUnit を使用してアプリケーション テストをセットアップしたばかりで、認証をどうするかを考えています。私のアプリには強制ログイン画面があり、ユーザーはメインアプリに入る前に Facebook で認証する必要があります。ユーザーが認証することを決定すると、Safari にポップされ、Facebook によって管理される認証シーケンスを経て、アプリに戻されます (新しいユーザーの場合は、さらに登録手順が必要です)。

私が理解しようとしているのは、ログイン画面を通過するアプリケーション テストを取得するにはどうすればよいかということです。

私が検討したオプションの 1 つは、コードで検出できるプリプロセッサ マクロ (「TEST = 1」など) を追加する新しいビルド構成 (「Test」など) を作成することです。次に、そのテスト構成についてのみ、通常のログイン コードを、アプリが Safari にポップアウトする必要のない FBTestSession に置き換えることができました。ただし、よりクリーンなオプションがあればいいのですが...

FBTestSession のドキュメントは次のとおりです: https://developers.facebook.com/docs/reference/ios/3.0/class/FBTestSession/

前もって感謝します!

4

1 に答える 1

2

2 つの方法が考えられますが、どちらもテスト フレームワークが存在するかどうかのランタイム検出を伴います。

ログイン コードで、テストを実行しているかどうかを確認します。もしそうなら、続けないでください:

BOOL runningTests = NSClassFromString(@"SenTestCase") != nil;
if (runningTests)
    return;

もう 1 つの方法は、ほとんど何もしないテストに別のアプリ デリゲートを使用することです。main.m で:

@autoreleasepool {
    BOOL runningTests = NSClassFromString(@"SenTestCase") != nil;
    Class delegateClass = runningTests ? [TestingAppDelegate class] : [AppDelegate class];
    return UIApplicationMain(argc, argv, nil, NSStringFromClass(delegateClass));
}

最初の方法の利点は、すばやく簡単にできることです。2 番目の方法の利点は、徹底的であるため、テスト中にアプリを完全に制御できることです。

于 2013-05-31T05:53:09.250 に答える