2011-01-30 92 views
6

我是新來ocUnit,我試圖比較兩個數組與STAssertTrue方法和==相等。做在ocUnit的NSArray比較

下面簡單地測試詢問被測系統(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; 
} 

然而,當測試運行我得到失敗。我應該如何比較這些對象以查看它們是否相同?

預先感謝您

回答

2

你可能想是這樣的:

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

這將通過陣列和返回false,如果每個項目不返回從其實現的isEqual真實。如果你的數組成員是NSStrings,那麼你應該很好。

正如其他人所說,在Objective-C中,==意味着指針相等而不是值等價。

1

你所比較的是否預期結果都指向同一個數組,他們顯然不是。相反,爲了比較你需要通過兩個NSArrays並使用對象的比較函數比較逐個對象的內容。

3

有一個宏STAssertEqualObjects它使用-isEqual:進行對象比較。我認爲這正是你需要的。

STAssertTrue你的情況比較對象指針和失敗,因爲resultexpected不同對象(它們的指針是不同的)。

+0

在我看來,這是比接受的答案更好的方法。如果數組不同,則斷言失敗時將打印兩者的內容,這通常很有用。 – 2013-01-04 13:09:38

相關問題