XCTAssert NSSet计数

时间:2014-02-11 19:59:18

标签: ios unit-testing xctest

我正在尝试使用XCTAssert编写单元测试。 我有一个NSSet,我想测试这个集合是否包含任何对象。

我查看:

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

测试总是通过。在我的测试用例中,NSSet为空。当我插入一个if语句并询问if (mySet.count == 0)时它是真的 - 因此它们不是NSSet中的元素。

为什么断言没有破坏? 或者:如何使用XCTAssert检查NSSet或NSArray是否为空?

1 个答案:

答案 0 :(得分:2)

该功能的格式为

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

如果某些条件评估为true,则测试通过,如果为false则失败。例如:

// 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语句和   询问if(mySet.count == 0)是否为真 - 所以它们不是元素   NSSet

如果您的论坛为空,XCTAssertTrue( mySet.count == 0, @"" )会过去,因为mySet中没有任何内容。