XCTAssertEqual无法比较两个字符串值?

Kon*_*d77 67 unit-testing objective-c xctest

我添加了一个简单的单元测试来测试我的字符串扩展.但它失败了.我在这里做错了什么?

据我所知XCTAssertEqual,测试价值而不是对象本身?

第三行顺便说一句,字符串是相同的,但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]);
}
Run Code Online (Sandbox Code Playgroud)

Are*_*lko 154

来自以下文件XCTAssertEqual:

当a1不等于a2时生成失败.此测试适用于C标量,结构和联合.

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

XCTAssertTrue([[firstNickName initialsFromString] isEqualToString:expectedResult],
              @"Strings are not equal %@ %@", expectedResult, [firstNickName initialsFromString]);
Run Code Online (Sandbox Code Playgroud)

  • 看来如果您将XCTAssertEqualObjects()两个NSString对象与isEqualToString:自动进行比较. (7认同)
  • 不幸的是,尽管仍然在文档中,从Xcode 7.2开始,XCTAssertEqualObjects不再可用. (3认同)
  • XCTAssetEqualObjects 在 Xcode 8.0 中可用,用于比较 NSStrings。 (2认同)

Leo*_*eon 12

我刚才有一个类似的问题可能对某人有帮助.

我有一个Float扩展函数,它返回一个字符串.以下测试失败:

testValue = 0.01
XCTAssertEqual(testValue.formattedForCost(), "0,01 €")
Run Code Online (Sandbox Code Playgroud)

通过以下消息:

Assertions: XCTAssertEqual failed: ("Optional("0,01 €")") is not equal to ("Optional("0,01 €")")
Run Code Online (Sandbox Code Playgroud)

这很烦人.但是我发现如果我改变我的测试以使用unicode不间断空格字符:

XCTAssertEqual(testValue.formattedForCost(), "0,01\u{00a0}€")
Run Code Online (Sandbox Code Playgroud)

它过去了.