0

私はOCUnitにかなり慣れていないので、次のようなメソッドにテストケースを追加しようとしています:

- (void) processMessageBody:(XMPPMessage *)message
                   fromNick:(NSString *)nick;
{
    BOOL isEcho;

    SBEventMessage *eventMessage = [self parseMessageBody:message
                                                 fromNick:nick
                                                   isEcho:&isEcho];    
    if (isEcho)
    {
        NSString *requestID = [[message attributeForName:kSBMessageIDField] stringValue];

        [self processResponse:eventMessage
                        error:nil
                   forRequest:requestID];
    }
}

メソッドの testCases を正常に作成したparseMessageBody:fromNick:isEcho:ので、そのメソッドが正しく動作することを確信しています。processResponse:error:forRequest:ただし、正しいシナリオで呼び出されることをテストしたいと思います。グローバル変数を定義し、そのメソッドをスウィズルして、ここで提案されているように書くことを考えていましたが、それはあまりにも洗練されていないのではないかと考えていました。OCMock を使用してこれを行う方法はありませんか?

4

2 に答える 2

2

サブクラスとオーバーライド メソッド。テストファイルで次を直接定義します。クラスの名前が Foo だとしましょう。

@interface TestFoo : Foo
@property (assign, nonatomic) NSUInteger processResponseCount;
@property (strong, nonatomic) SBEventMessage *processResponseEventMessage;
@property (strong, nonatomic) id processResponseError;
@property (copy, nonatomic) NSString *processResponseRequestID;
@end

@implementation TestFoo

- (void)processResponse:(id)eventMessage error:(id)error forRequest:(id)requestID
{
    ++_processResponseCount;
    _processResponseEventMessage = eventMessage;
    _processResponseError = error;
    _processResponseRequestID = requestID;
}

@end

テストで、Foo の代わりに TestFoo を作成します。その後、次のテストを作成できます

  • このメソッドが呼び出された回数
  • 最後に呼び出されたときの引数

…とは言っても、別のクラスを抽出する必要があるかどうかを検討し、このメソッドをそこに移動します。次に、代わりに OCMock (または OCMockito) などのモック フレームワークを使用できます。

于 2013-02-01T02:22:19.560 に答える