2016-08-04 12 views
1

初めてiOSユニットテストを書いていますが、何か問題があります。 PHPで単体テストを書くときに、関数の返り値が配列であると主張することもできます。関数が配列を返すことをアサートする方法

以下のコードは機能しましたが、これは配列の内容が変更される可能性があるため、これを行う最善の方法ではない可能性があります。

NSArray *first = [Example getArray]; 
NSArray *second = @[@"test", @"test2"]; 

XCTAssertEqualObjects(first, second, @"Example:getArray doesn't return an array."); 

Objective-Cでこれを行うには適切な方法はありますか?

+0

う[最初isKindOfClass:[NSArrayのクラス]]は動作しますか? –

+0

@JohnFarkersonあなたはそうだ、ごめんなさい。私はあなたのアプリを見ていない。私は間違いを訂正しました。 – user4992124

+0

いいえ心配、ありがとう男:) –

答えて

0

簡単に言えば:

XTCAssert([first isKindOfClass:[NSArray class]], @"First isn't an array"); 
+0

@Downvoterはコメントを残したいですか? –

0

をちょうどこのように、あなたの返されたオブジェクトのクラスを確認してください。

XCTAssertTrue([first isKindOfClass:[NSArray class]], @"Example:getArray doesn't return an array."); 

また、あなたはarray.countを確認することができ、またはそれはで、特定のオブジェクトが含まれている場合containsObject:メソッド。

2

メソッドが特定のクラスを返すかどうかをテストするには、isKindOfClassを使用してオブジェクトのタイプをテストできます。

XCTAssertTrue([first isKindOfClass:[NSArray class]], @"..."); 

また、配列の内容をテストする場合は、いくつかのオプションがあります。

  • 両方の配列の順序が同じになるように、配列の内容を並べ替えることができます。配列をソートする方法は、this SO postを参照してください。

    // let's say your arrays contains objects that have a name property 
    NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES]; 
    NSArray *sortedFirst = [first sortedArrayUsingDescriptors]; 
    NSArray *sortedFirst = [first sortedArrayUsingDescriptors]; 
    XCTAssertEqualObjects(sortedFirst, sortedSecond, @"..."); 
    
  • あなたは、配列でNSSetを作成することができます。 NSSetの場合、等価性は、表示される順序ではなく、セット内に同じオブジェクトがあるかどうかだけを調べます。これは、重複したオブジェクトを決して含んでいない配列でのみ機能します。重複オブジェクトを持つ配列からセットを作成すると、それらのオブジェクトの1つのインスタンスだけがセットに含まれます。

    NSSet *firstSet = [NSSet setWithArray:first]; 
    NSSet *secondSet = [NSSet setWithArray:second]; 
    XCTAssertEqualObjects(firstSet, secondSet, @"..."); 
    
  • アレイ内のオブジェクトの数を比較できます。非常にきめ細かなテストではありませんが、タイプを比較するだけではなく、より詳細なテストが可能です。

    XCTAssertEqual(first.count, second.count, @"..."); 
    
関連する問題