将XCTest与Objective-C ++代码一起使用:"程序中的意外@"错误

时间:2014-12-19 08:49:22

标签: ios xcode unit-testing objective-c++ xctest

我继承了一个包含很多Objective-C ++代码的项目,没有单元测试。我正在尝试使用Xcode 6.1.1和XCTest进行测试。我已经开始使用默认设置创建一个新的Cocoa Touch单元测试包。

当我创建一个标准的XCTest子类时,一切正常。当我然后包含一个Obj-C ++文件时,构建阶段会破坏各种与C ++相关的错误。这是可以理解的,因为测试子类需要编译为Obj-C ++类。

当我将XCTest子类从myTests.m切换到myTests.mm时,构建阶段会再次中断,但这次是

Unexpected '@' in program

显示了另外两个错误:

Expanded from macro 'XCTAssert'

Expanded from macro '_XCTPrimitiveAssertTrue'

错误是由XCAssert调用的NSString参数引起的 - 在测试用例中用标准C字符串替换它并不能解决问题。

如果我将测试目标的C ++标准库从libstdc++切换到libc++,则@错误消失,但随后在其余部分编译Obj-C ++代码项目失败。

我不太了解Obj-C ++来解决这个问题 - 我是否需要设置一些额外的编译器标志才能成功使用XCTest

1 个答案:

答案 0 :(得分:0)

您是否确定错误是由您传递的NSString引起的?您可以通过传递nil或将字符串放入变量并传递变量来测试该假设。我问的原因是_XCTPrimitiveAssertTrue包含几个@ -prefixed关键字,似乎可以想象其中一个可能会绊倒(虽然我不知道为什么)。

同样看到逐字编译器调用和输出(或不是。我在这里没有做出任何承诺)可能很有启发性。