H男、 私は、キウイテストを使用してデリゲートメソッドを非同期にテストする方法の良い例を見つけることを長年試みてきました。Kiwiと非同期にデリゲートをテストする方法
私は、テストのためのプロトコルを定義するマネージャクラスを持っています。パスとフェイルのメソッドがデリゲートで返されます。誰でもこれを行う方法のサンプルコードを提供できますか?テストクラス自体を実装して、マネージャ上のメソッドを呼び出すことはできますか?
みんなありがとう
H男、 私は、キウイテストを使用してデリゲートメソッドを非同期にテストする方法の良い例を見つけることを長年試みてきました。Kiwiと非同期にデリゲートをテストする方法
私は、テストのためのプロトコルを定義するマネージャクラスを持っています。パスとフェイルのメソッドがデリゲートで返されます。誰でもこれを行う方法のサンプルコードを提供できますか?テストクラス自体を実装して、マネージャ上のメソッドを呼び出すことはできますか?
みんなありがとう
私はあなたがモックオブジェクトは、あなたが期待するデリゲートのコールバックを受け取ることを確認し、その後、デリゲートのためで立ってモックオブジェクトを作成し、によって達成しようとしている思い何を行うことができます。デリゲートプロトコルに準拠モックオブジェクトを作成
id delegateMock = [KWMock mockForProtocol:@protocol(YourProtocol)];
[manager setDelegate:delegateMock];
NSString *response = @"foo";
managerRepliedWithResponse
とfoo
を受け取ることを期待しています)[[[delegateMock shouldEventually] receive] managerRepliedWithResponse:response];
[manager performMyMethod];
キーを使用して、メソッドを呼び出す前に期待を設定し、shouldEventually
を使用してチェックされてアサーションを遅延して与えるれます方法を実行するオブジェクト時間。私は私が扱った状況にそれをより具体的だとギアアップはいえ、in more detail in a post on my siteをプロセスを書いてhttps://github.com/allending/Kiwi/wiki/Expectations
- キウイのwikiに掲載されていますが、使用することもでき期待の範囲があります
。
例で
SPEC_BEGIN(IFStackOverflowRequestSpec)
describe(@"IFStackOverflowRequestSpec",^
{
context(@"question request",^
{
__block IFViewController *controller = nil;
beforeEach(^
{
controller = [IFViewController mock];
});
it(@"should conform StackOverflowRequestDelegate protocol",^
{
[[controller should] conformToProtocol:@protocol(StackOverflowRequestDelegate)];
});
it(@"should recieve receivedJSON",^
{
NSString *questionsUrlString = @"http://api.stackoverflow.com/1.1/search?tagged=iphone&pagesize=20";
IFStackOverflowRequest *request = [[IFStackOverflowRequest alloc] initWithDelegate:controller urlString:questionsUrlString];
[[request fetchQestions] start];
[[[controller shouldEventuallyBeforeTimingOutAfter(3)] receive] receivedJSON:any()];
});
it(@"should recieve fetchFailedWithError",^
{
NSString *fakeUrl = @"asda";
IFStackOverflowRequest *request = [[IFStackOverflowRequest alloc] initWithDelegate:controller urlString:fakeUrl];
[[request fetchQestions] start];
[[[controller shouldEventuallyBeforeTimingOutAfter(1)] receive] fetchFailedWithError:any()];
});
});
});
完全な例は非常に微妙ですが、非常に重要な詳細はthis link.
+1に設立することができますようにあなたが行うことができます! "キーは、あなたが方法を呼び出す前に期待を設定しています" – Bach
それは今一年以上されていると私は同じことに苦労しています。 expectFutureValue/withoutを使用すると、前後で動作しません。私はこの要求を待っている気がすることができる唯一の方法は、どこかで確認するという本当の価値があることです。 – Hugo