1

UIViewcontrollerどのテストファイルを選択する必要があるかをどのように知るようになったのだろうか。

たとえば、私はそのUIViewcontrollers中にたくさんの大きなプロジェクトを持っています。

また、コントローラーごとに個別のテスト ファイルを作成したいと考えています。1 はlogin用、もう1 つはprofile UIViewcontroller用です。

フレームワークが初期段階であることは知っていますが、どんな助けも大歓迎です。

ありがとう。

4

1 に答える 1

4

サブリミナルでは、テストがアプリケーションを駆動しますが、その逆ではありません。さまざまなビュー コントローラーに対応するテストを作成できますが、アプリケーション内でそれらのコントローラーのビューに移動するのはテストの役割です。

そのナビゲーションは通常、テストの実装内で行われます-setUpTest。アプリケーションが「ログイン」というボタンがある「ホーム」画面を開くとします。そのボタンを押すと、「ログインビューコントローラー」が表示されます。そのビュー コントローラーをテストする方法は、次のようなテストを統合テスト ターゲットに追加することです。

@interface LoginTest : SLTest
@end

@implementation

- (void)setUpTest {
    // make sure we're at "Home", then:
    SLButton *loginButton = [SLButton elementWithAccessibilityLabel:@"Log in"];
    [loginButton tap];
}

/*
now test the login view controller:
- (void)testThat... { }
*/

- (void)tearDownTest {
    // log out and go back to "Home"
}

@end

-setUpTestテストが と の既知の場所で開始および終了することが非常に重要であることに注意してください-tearDownTest。特定の順序で実行されるサブリミナル テストに依存することはできません。

では、プロファイル画面をどのようにテストしますか? アプリケーションで、ログイン直後にプロファイルが表示されたとします。この場合、プロファイル テストは次のようになります。

@interface ProfileTest : SLTest
@end

@implementation

- (void)setUpTest {
    // Log in
}

/*
now test the profile view controller:
- (void)testThat... { }
*/

- (void)tearDownTest {
    // log out and go back to "Home"
}

@end

ProfileTestテストしたいビューに到達するために必要なことを実行する必要があることがわかります。この場合はログインします (これが、LoginTestログアウトして の「ホーム」に戻ることが-tearDownTest重要ProfileTestな理由です。最初に実行しても既知の状態LoginTest)。

このセットアップ プロセスを簡単にするために、「アプリ フック」を使用できます。LoginTestログイン UI が機能することを確認すると、その UI を通過することは重要ではありませんProfileTest。代わりに、アプリケーションにログインを要求できます。アプリケーション デリゲートがテストを開始する直前に、テスト ユーザーをプログラムでログインできるものとして「ログイン マネージャー」シングルトンを登録する場合があります。

[[SLTestController sharedTestController] registerTarget:[LoginManager sharedManager] 
                                           forAction:@selector(logInWithInfo:)];

次に、-[ProfileTest setUpTest]次を呼び出すことができます。

[[SLTestController sharedTestController] sendAction:@selector(logInWithInfo:)
                                         withObject:@{
                                                        @"username": @"john@foo.com",
                                                        @"password": @"Hello1234"
                                                     }];
于 2013-06-26T10:18:35.963 に答える