我和我的同事几周来一直在单元测试中苦苦挣扎。我们尝试过设置 SenTest、GTM 和其他框架,但我们永远无法克服链接错误的棘手问题。
这就是我现在在 GTM 的位置。
我按照此处的说明进行操作: http://code.google.com/p/google-toolbox-for-mac/wiki/iPhoneUnitTesting。我发现我还需要将文件“GTMObjC2Runtime.h”添加到项目中。然后,我在安装框架后得到了预期的控制台输出:“在 0.030 (0.030) 秒内执行了 0 次测试,有 0 次失败(0 次意外)”
接下来,我去为我的一个课程编写一个测试用例。我创建了WebAPITest.h。我创建了一个简单的测试,效果很好。我刚刚验证了 1 == 1。
接下来,我决定为我的 AppDelegate.h 编写一个测试。因此,我将 #import "AppDelegate.h" 添加到 WebAPITest.h,结果出现 8 个链接错误。我的项目使用 FBConnect,编译器抱怨找不到 FBConnect 文件。为了解决这个问题,我将 FBConnect 标头搜索路径添加到测试目标的构建配置中,并且链接错误消失了。
现在是我被难住的地方。当我尝试在实现中引用 AppDelegate 时,我收到以下链接错误:
Building target “fooTest” of project “foo” with configuration “Debug” — (2 errors)
Undefined symbols:
".objc_class_name_AppDelegate", referenced from:
literal-pointer@__OBJC@__cls_refs@AppDelegate in WebAPITest.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
知道我接下来需要做什么吗?
您的测试包确实需要访问您尝试测试的已编译类。您决定通过将其直接添加到目标(是的,及其所有依赖项)、链接到实现该类的库,或者通过设置测试包以便由主机应用程序加载来实现这一目标它有一个类的实现。
此参考可能对您有用:
也来自 Apple 的主要单元测试文档:
查找“测试主机”和“捆绑加载器”等术语。
这些东西不是很容易理解,但如果你埋头苦干,文档最终会澄清一切。