6

私はocUnitが初めてで、2つの配列をSTAssertTrueメソッドと==で比較しようとしています。

以下のテストは、単にテスト中のシステム (sut) に配列を要求するだけです。

- (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");
}

次に、本番コード内で同じ配列を返すだけです

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

しかし、テストを実行すると失敗します。これらのオブジェクトを比較して、それらが同じかどうかを確認するにはどうすればよいですか?

前もって感謝します

4

3 に答える 3

3

オブジェクトの比較STAssertEqualObjectsに使用するマクロがあります。-isEqual:まさにあなたが必要としているものだと思います。

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

于 2011-01-30T07:39:24.590 に答える
2

おそらく次のようなものが必要です。

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

これは配列を通過し、各項目がその isEqual 実装から true を返さない場合は false を返します。示されているように、配列メンバーが NSStrings である場合は、問題ありません。

他の仲間が言ったように、Objective-C では、== はポインターの等価性を意味し、値の等価性を意味しません。

于 2011-01-30T03:57:16.130 に答える
1

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

于 2011-01-30T02:02:01.973 に答える