How to organize unit testing of a library project in Xcode?
我还不是集成开发环境的粉丝,但我正在努力克服偏见,学习Xcode。(Eclipse/CDT是下一个;当我去年尝试时,我也不能让它为我工作,但这是一个单独的问题。)
我正在一个新项目中编写一些新代码,这个项目将成为(小库的一部分)。我也要进行单元测试。如何向Xcode解释我正在构建(共享)库,但我也希望在测试程序中使用它,该程序是从不在共享库中的单独源代码编译而成的?
源代码:
制作文件:
我已经把atom.c和atom.h编译到了库中。我只是不知道如何组织事情,以便我也可以构建test-atom来链接到库。我假设当我排序之后,为测试支持代码添加库,那么test atom.c将相对直接前进——即使它还没有在xcode控制下。
fwiw,我主要在c工作,而不是目标c。
您的项目中需要两个目标;Xcode中的目标生成的产品是库、可执行文件或其他输出。
因此,您将有一个目标来生成libatom.dylib,我怀疑您已经设置了该目标,以及另一个命令行可执行目标来生成test-atom可执行文件,供您运行以测试库。
一旦你添加了test-atom目标,你就应该得到test-atom.c的信息,从libatom.dylib目标中删除它的成员,并将它添加为你的新test-atom目标的成员。文件的目标成员身份决定了构建目标是否会尝试编译/复制/链接该文件。(目标对文件的处理取决于当它成为成员时添加到哪个构建阶段。)
您还应该在产品组中获得有关libatom.dylib条目的信息,并使其成为test-atom目标的成员。这将导致test-atom可执行文件链接到libatom.dylib上。
最后,获取有关test-atom目标(而不是产品)的信息,并在"常规"选项卡中添加对libatom.dylib目标的依赖关系。这将确保构建test-atom目标始终首先构建libatom.dylib目标。
编辑:请参阅Xcode3和Objective-C的自动化单元测试(我最初链接到的文章的最新版本,如下面的评论中所指出的)。另请参见单元测试目标C代码的最佳方法是什么?虽然您显然还没有使用obj-c,但是为c代码设置新目标的基础将是相同的,并且特定于ocUnit的内容非常代表了单元测试在IDE中的工作方式。
- 请不要让人们说"用OcUnit测试你的代码"——它已经过时了,而且在它发布几个月后就已经过时了。首先,它告诉人们下载ocUnit,但是自从2005年WWDC发布Xcode2.1以来,ocUnit就已经包含在Xcode中了。请将人们指向"Xcode3和Objective-C的自动化单元测试"developer.apple.com/mac/articles/tools/…。
- 感谢您指点这篇新文章!