皆さん、私は何年もの間、Kiwi テストを使用してデリゲート メソッドを非同期的にテストする方法について、いくつかの良い例を見つけようと努めてきました。
テスト用のプロトコルを定義するマネージャ クラスがあり、デリゲートで pass メソッドと fail メソッドが返されます。これを行う方法についてサンプルコードを提供できる人はいますか? マネージャーでメソッドを呼び出すために、テスト クラス自体に を実装させることはできますか?
みんなありがとう
皆さん、私は何年もの間、Kiwi テストを使用してデリゲート メソッドを非同期的にテストする方法について、いくつかの良い例を見つけようと努めてきました。
テスト用のプロトコルを定義するマネージャ クラスがあり、デリゲートで pass メソッドと fail メソッドが返されます。これを行う方法についてサンプルコードを提供できる人はいますか? マネージャーでメソッドを呼び出すために、テスト クラス自体に を実装させることはできますか?
みんなありがとう
例のようにすることができます
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()];
});
});
});
完全な例は、このリンクにあります。
デリゲートの代わりになるモック オブジェクトを作成し、期待するデリゲート コールバックをモック オブジェクトが受け取ることを確認することで、達成しようとしていると私が思うことを実行できます。したがって、プロセスは次のようになります。
id delegateMock = [KWMock mockForProtocol:@protocol(YourProtocol)];
[manager setDelegate:delegateMock];
NSString *response = @"foo";
managerRepliedWithResponse
and foo
)[[[delegateMock shouldEventually] receive] managerRepliedWithResponse:response];
[manager performMyMethod];
重要なのは、メソッドを呼び出す前に期待値を設定することです。これを使用shouldEventually
すると、チェックされるアサーションが遅延しmanager
、メソッドを実行する時間がオブジェクトに与えられます。
Kiwi wiki - https://github.com/allending/Kiwi/wiki/Expectationsにリストされている、使用できる期待の範囲もあります。
私が扱っていた状況に合わせてより具体的に調整されていますが、私は自分のサイトの投稿でプロセスをより詳細に書いています.