刚才写了怎么在ios项目中引入XCTest单元测试框架:在ios项目中引入单元测试(上)
不过还有2个问题,本文补充一下
这是最普遍的场景,如果做不到,根本就谈不上单元测试了。一般单元测试的代码都会这么写:
@interface YLSClientInfoTest : XCTestCase @end @implementation YLSClientInfoTest { YLSClientInfo *clientInfo; } - (void)setUp { [super setUp]; clientInfo = [YLSClientInfo new]; }
本来我以为这个不需要特别的配置,谁知一运行就报错:
Undefined symbols for architecture i386:
"_OBJC_CLASS_$_YLSClientInfo", referenced from:
objc-class-ref in YLSClientInfoTest.o
(maybe you meant: _OBJC_CLASS_$_YLSClientInfoTest)
看起来是找不到YLSClientInfo这个类。搞了好一会,原来这个类没有被编译到Test的Target里,需要在Util Pane里打钩才行:
所以需要做单元测试的类,以及相关依赖的类,都要打上勾才行。一个个打钩很麻烦,还容易遗漏,可以在Test target -> Build Phases -> Compile Sources里,一次性都加上
勾上以后,一跑又挂了,这次换了个错误信息,说找不到FMDatabase.h,这个是项目通过CocoaPods引入的
这次自己研究了半天也没找到地方,最后还是在stackoverflow里找到答案
在project -> info -> configurations里,把base从none改为Pods
所有通过CocoaPods引入的第三方组件,只要引入了pods编译后的库就行了。直接导入工程的组件,则都需要手工加到Test target里才可以。所以用pods还是要方便多了