【发布时间】:2014-12-19 08:49:22
【问题描述】:
我继承了一个包含大量 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?
【问题讨论】:
-
您使用的是什么版本的 Xcode?我刚刚在 Xcode 6.1.1 中创建了一个新项目,并将 XCTest 子类更改为使用
.mm作为文件扩展名。编译为 Objective-C++ 就好了。
标签: ios xcode unit-testing objective-c++ xctest