2016-08-04 128 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,平等只會看你是否在集合中有相同的對象,而不是它們出現的順序。這隻適用於永遠不會包含重複對象的數組。如果從具有重複對象的數組中創建一個集合,那麼這些對象中只有一個實例將在集合中。

    NSSet *firstSet = [NSSet setWithArray:first]; 
    NSSet *secondSet = [NSSet setWithArray:second]; 
    XCTAssertEqualObjects(firstSet, secondSet, @"..."); 
    
  • 您可以比較數組中的對象數。這不是一個非常精細的測試,但它比僅比較類型提供了更細化的測試。

    XCTAssertEqual(first.count, second.count, @"..."); 
    
相關問題