我正在尝试使用XCTAssert编写单元测试。 我有一个NSSet,我想测试这个集合是否包含任何对象。
我查看:
XCTAssertTrue((mySet.count == 0), @"mySet should not be empty");
测试总是通过。在我的测试用例中,NSSet为空。当我插入一个if语句并询问if (mySet.count == 0)
时它是真的 - 因此它们不是NSSet中的元素。
为什么断言没有破坏? 或者:如何使用XCTAssert检查NSSet或NSArray是否为空?
答案 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
中没有任何内容。