0

この URLに接続して、特定の通貨ペアの為替レートを取得するアプリの開発を始めたところです。

HTTP リクエストをテストする必要があり、最終的に Kiwi と Nocilla について学習しました。ただし、私はあらゆる種類のテストにまったく慣れていないため、開始するのに役立つ Nocilla に関する情報はあまりありません。

NSURLConnectionDataDelegateすべてのおよびNSURLConnectionDelegateメソッドをシングル ビュー アプリケーションのに追加しましViewControllerた。URL から取得したデータは に保存され@property (strong, nonatomic) NSMutableData *receivedData;ます。プログラムを実行すると、すべてが期待どおりに機能しますが、私が書いたテストに合格できませんでした:

SPEC_BEGIN(URLConnectionSpec)

__block URLConnectionAppDelegate *app_delegate;
__block URLConnectionViewController *view_controller;

describe(@"URLConnection", ^{
    beforeAll(^{
        [[LSNocilla sharedInstance] start];

        app_delegate = [[UIApplication sharedApplication] delegate];
        [[app_delegate shouldNot] beNil];
        view_controller = app_delegate.viewController;
    });

    afterAll(^{
        [[LSNocilla sharedInstance] stop];
    });

    afterEach(^{        
        [[LSNocilla sharedInstance] clearStubs];
    });

    context(@"When testing", ^{
        it(@"should do something", ^{
            stubRequest(@"GET", @"http://rate-exchange.appspot.com/currency?from=USD&to=EUR&q=1");

            [view_controller beginCommunication];

            [[expectFutureValue([NSString stringWithUTF8String:[view_controller.receivedData bytes]]) shouldEventuallyBeforeTimingOutAfter(2)] equal:@"{\"to\": \"EUR\", \"rate\": 0.76610740799999999, \"from\": \"USD\", \"v\": 0.76610740799999999}"];
        });
    });
});

SPEC_END

コードのスニペットが長くなって申し訳ありません。

テストは常にこのメッセージで失敗しました

URLConnection_WhenTesting_ShouldDoSomething] : 'URLConnection, When testing, should do something' [FAILED], expected subject to equal "{"to": "EUR", "rate": 0.76610740799999999, "from": "USD", "v": 0.76610740799999999}", got ""

テストが早く終了することを期待して、時間を 10 秒に変更してみましたが、同じ結果が得られました。「receivedData」が空である理由がわかりません。

何か助けていただければ幸いです

4

1 に答える 1

1

コメントの議論を参照してください: Kiwi テストの全体的な構造は良さそうですが、NocillastubRequest関数呼び出しは、テストが期待する応答をもたらさないようです。

andReturnRawResponseおそらく、予想される応答データを設定するために使用できます。このようなもの(Nocillaの構文が正しいと仮定して):

NSData *rawData = ...
stubRequest(...).andReturnRawResponse(rawData);
[view_controller beginCommunication];
[expectFutureValue([view_controller.receivedData bytes])
  shouldEventuallyBeforeTimingOutAfter(2)] equal:rawData.bytes];
于 2013-07-03T01:51:39.103 に答える