在ios项目中引入单元测试(下)

刚才写了怎么在ios项目中引入XCTest单元测试框架:在ios项目中引入单元测试(上)

不过还有2个问题,本文补充一下

单元测试类依赖原始类

这是最普遍的场景,如果做不到,根本就谈不上单元测试了。一般单元测试的代码都会这么写:

@interface YLSClientInfoTest : XCTestCase

@end

@implementation YLSClientInfoTest

{
    YLSClientInfo *clientInfo;
}

- (void)setUp
{
    [super setUp];
    clientInfo = [YLSClientInfo new];
}

单元测试类里有一个原始类的引用,并在setUp()方法中创建实例和初始化,然后在具体的测试方法testXXX()中做测试

本来我以为这个不需要特别的配置,谁知一运行就报错:

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里打钩才行:

在ios项目中引入单元测试(下)_第1张图片

所以需要做单元测试的类,以及相关依赖的类,都要打上勾才行。一个个打钩很麻烦,还容易遗漏,可以在Test target -> Build Phases -> Compile Sources里,一次性都加上

解决对Pods的依赖

勾上以后,一跑又挂了,这次换了个错误信息,说找不到FMDatabase.h,这个是项目通过CocoaPods引入的

这次自己研究了半天也没找到地方,最后还是在stackoverflow里找到答案

在project -> info -> configurations里,把base从none改为Pods

在ios项目中引入单元测试(下)_第2张图片

所有通过CocoaPods引入的第三方组件,只要引入了pods编译后的库就行了。直接导入工程的组件,则都需要手工加到Test target里才可以。所以用pods还是要方便多了

你可能感兴趣的:(ios,CocoaPods,XCTest)