2011-01-30 8 views
6

私はocUnitを初めて使用しています.2つの配列をSTAssertTrueメソッドと==を等価と比較しようとしています。ocUnitのNSArrayの比較を行っています

試験単にリターン

- (void) testParse { 
    SomeClassForTesting* sut = [[SomeClassForTesting alloc] init]; 
    NSArray* result = [sut parseAndReturn]; 

    NSArray* expected = [[NSArray alloc] initWithObjects:@"1", @"2", @"3", @"4",nil]; 

    STAssertTrue(result == expected, @"This test failed"); 
} 

に配列するためのテスト(SUT)の下でシステムに要求下にそして私の生産のコードの中Iは、単に同じアレイ

- (NSArray *)parseAndReturn 
{ 
    NSArray* x = [[NSArray alloc] initWithObjects:@"1", @"2", @"3", @"4",nil]; 
    return x; 
} 

さらにテストを返します私は失敗する。これらのオブジェクトを比較して、それらが同じかどうかを確認する必要がありますか?

は、あなたが比較しているどのような事前

答えて

2

あなたは、おそらくのような何かをしたい:

STAssertTrue([result isEqual: expected], @"This test failed"); 

これは、配列を通過し、各項目は、その実装のisEqualからtrueを返していない場合はfalseを返します。あなたの配列メンバがNSStringsのように表示されている場合、あなたは良いことをする必要があります。

他の人は、Objective-Cでは、==はポインタの等価性を意味し、値の等価性を意味しません。

1

にありがとう期待結果が、彼らは明らかではありません同じ配列、を指しているかどうかです。その代わりに、コンテンツを比較するには、両方のNSArraysを通過し、オブジェクトのcompare関数を使用してオブジェクトごとオブジェクトを比較する必要があります。

3

オブジェクト比較のために-isEqual:を使用するマクロSTAssertEqualObjectsがあります。私はそれがまさにあなたが必要としているものだと思います。あなたのケースで

STAssertTrueは、オブジェクトポインタを比較し、resultexpected異なるオブジェクト(そのポインタが異なる)であるため、失敗します。

+0

私の意見では、これは受け入れられた答えより良いアプローチです。配列が異なる場合、アサートに失敗したときに両方の内容が出力されますが、これは通常役立ちます。 –

関連する問題