どのように私はOCMockで引数としてハンドルを受け入れる方法を模擬するのですか?
-
18-09-2019 - |
質問
私は、次の署名と同等のものを持っている方法を模擬しようとしています:
- (NSDictionary *) uploadValues:(BOOL)doSomething error:(NSError **)error
私は私のテストコードが適切に辞書を使用することを確認することができますように、それは小さな辞書を返すようにしたいです。しかし、関係なく、私は何をすべきかOCMockは関係なく、常に私はそれをどのようにスタブの、メソッドからnilを返しません。エラーは、私がテストしていたコードではnilとして始まり、そしてこれらは、私はそれを試してみたスタブ異なる方法があります:
NSError * error = nil;
[[[mock stub] andReturn:someDict] uploadValues:YES error:&error];
[[[mock stub] andReturn:someDict] uploadValues:YES error:nil];
[[[mock stub] andReturn:someDict] uploadValues:YES error:[OCMArg any]];
と、それらのどれも動作しません。スタブメッセージ引数としてOCMockサポートハンドルを行い、もしそうであれば、それを行うための正しい方法は何ですか?
解決
悲しいことに、私はどちらか、このための良い解決策を見つけていません。私が言うことができる最高は可能な限り小さく** NSErrorを利用することを試み、その後、あなたは完全にあなたの部分のモックにモックができ孤立機能でそれを置くことです。
私はNSObjectの*(または派生)またはプリミティブ値(NSInteger、BOOLなど)以外のものを使用して任意のコードはかなり不可能OCMockを使用してテストにあることを発見しています。
他のヒント
[[[mock stub] andReturn:someDict] uploadValues:YES error:[OCMArg setTo:nil]];
または
NSError* someError = ...
[[[mock stub] andReturn:someDict] uploadValues:YES error:[OCMArg setTo:someError]];
また、行うことができます。
[[[mock stub] andReturn:someDict] uploadValues:YES error:[OCMArg anyPointer]];
これはあなたのコードが誤ってあなたが本当のNSErrorをバック合格したことを考えるように発生する可能性があります。
ARCで、あなたのメソッド宣言は、おそらく次のようになります。
- (NSDictionary *) uploadValues:(BOOL)doSomething error:(NSError *__autoreleasing *)error;
ここで私は方法のこれらのタイプを模擬する方法:
BOOL mockDoSomething = YES;
NSError __autoreleasing *error = nil;
[[[mock stub] andReturn:someDict] uploadValues:OCMOCK_VALUE(mockDoSomething) error:&error];
NSError *__autoreleasing *err = (NSError *__autoreleasing *) [OCMArg anyPointer];
[[[_mockReporter stub] andReturnValue:OCMOCK_VALUE((BOOL){YES})]
yourMethodCall:err];
私はこのような状況で支援するOCMArgのカテゴリを作成します。
OCMArg + Helpers.hます:
@interface OCMArg (Helpers)
+ (NSError *__autoreleasing *)anyError;
@end
OCMArg + Helpers.mます:
@implementation OCMArg (Helpers)
+ (NSError *__autoreleasing *)anyError {
return (NSError *__autoreleasing *)[OCMArg anyPointer];
}
@end
すると、いつでも私はそうのように、モックanyError
を使用する必要があるエラーのparamを持っています
[[myMock stub] someMethodWithArg:anArg error:[OCMArg anyError]];