我继承了一个包含很多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
?
答案 0 :(得分:0)
您是否确定错误是由您传递的NSString引起的?您可以通过传递nil或将字符串放入变量并传递变量来测试该假设。我问的原因是_XCTPrimitiveAssertTrue包含几个@ -prefixed关键字,似乎可以想象其中一个可能会绊倒(虽然我不知道为什么)。
同样看到逐字编译器调用和输出(或不是。我在这里没有做出任何承诺)可能很有启发性。