XCTAssertEqual无法比较两个string值?

我添加了一个简单的unit testing来testing我的string扩展。 但是失败了。 我在这里做错了什么?

从我所知道的XCTAssertEqual是testing的价值,而不是对象本身?

第三行btw,表示string是平等的,但XCTAssertEqual说,他们不是。

 - (void) testInitialsFromFullname { NSString *firstNickName = @"Mike Kain"; NSString *expectedResult = @"MK"; NSLog(@"Equal:%@", [[firstNickName initialsFromString] isEqualToString:expectedResult] ? @"YES" : @"NO"); XCTAssertEqual(expectedResult, [firstNickName initialsFromString], @"Strings are not equal %@ %@", expectedResult, [firstNickName initialsFromString]); } 

XCTAssertEqual的文档:

当a1不等于a2时生成失败。 这个testing是针对C标量,结构和联合的。

您应该使用XCTAssertEqualObjects (使用isEqual:内部)或类似的东西:

 XCTAssertTrue([[firstNickName initialsFromString] isEqualToString:expectedResult], @"Strings are not equal %@ %@", expectedResult, [firstNickName initialsFromString]); 

我刚刚有一个类似的问题,可能有助于某人。

我有一个返回一个string的Float扩展函数。 以下testing失败:

 testValue = 0.01 XCTAssertEqual(testValue.formattedForCost(), "0,01 €") 

有以下消息:

 Assertions: XCTAssertEqual failed: ("Optional("0,01 €")") is not equal to ("Optional("0,01 €")") 

这是相当烦人的。 但是,我发现如果我改变我的testing使用unicode不间断的空格字符 :

 XCTAssertEqual(testValue.formattedForCost(), "0,01\u{00a0}€") 

它通过。