2014-02-11 31 views
0

我正在嘗試使用XCTAssert編寫單元測試。 我有一個NSSet,我想測試這個集合是否包含任何對象。XCTAssert NSSet計數

我檢查有:

XCTAssertTrue((mySet.count == 0), @"mySet should not be empty"); 

測試總是通過。在我的測試用例中,NSSet是空的。當我插入if語句並要求if (mySet.count == 0)這是事實 - 因此它們在NSSet中不是元素。

爲什麼斷言不會中斷? 或者:如何使用XCTAssert檢查NSSet或NSArray是否爲空?

+1

你是如何創建該集合,並應該在這一點上是空的?你傳入的字符串與實際測試相矛盾。 –

+0

NSSet是一個來自NSManagedObject的關係。當NSSet爲空時,我想讓測試失敗。所以NSSet應該始終保存數據。當count爲0時 - >出現錯誤。 – Sebastian

回答

2

該函數的格式是

XCTAssertTrue(<some condition>, @"Some string that gets printed to the console if the test fails") 

測試通過如果一些條件評估爲真,並且如果假失敗。例如:

// create empty set 
NSSet *mySet = [[NSSet alloc] init]; 
// this test passes because the set is empty 
XCTAssertTrue([mySet count] == 0, @"Set should be empty"); 

// Set with three items 
NSSet *setTwo = [[NSSet alloc] initWithArray:@[ @"1", @"2", @"3" ]]; 
// passes test because there are three items 
XCTAssertTrue([setTwo count] == 3, @"We should have three items"); 
// failing test 
XCTAssertTrue([setTwo count] == 0, @"This gets printed to the console"); 

回到你的問題:

我不想讓測試失敗時的NSSet是空的。所以NSSet 應該始終保存數據。當count爲0時 - >出現錯誤。

你想測試一些項目已被添加到mySet。有兩個測試可以使用:

XCTAssertTrue([mySet count] > 0, @"Should have at least one item"); 
// or 
XCTAssertFalse([mySet count] == 0, @"mySet count is actually %d", [mySet count]); 

另外:

在我的測試用例中的NSSet是空的。當我插入一個if語句和 要求,如果(mySet.count == 0),它是真實的 - 所以他們在 沒有元素的NSSet

如果設置爲空,XCTAssertTrue(mySet.count == 0, @"")通行證因爲沒有物品在mySet