iOS - 通过命令行使用XCTest对项目进行单元测试(在不启用模拟器的情况下)

新公司非常重视unit test,所以在下在过去的一个礼拜对XCTest的unit test的各方面的进行了一些简单实践,并在这里做一个总结(因为发现某度现在能找到的关于XCTest方面的资料有点少)

当写iOS项目是,必要的单元测试,至少能够保障你的函数或者方法的正确性。而我作为iOS开发者,当然是使用Xcode作为开发工具,而XCTest作为Xcode自带的单元测试框架,自然是使用它更为顺手.

我这里对XCTest的用法暂时不加以描述,这篇文章,我要讲的是,当你写好XCTest之后,如果简单的直接通过命令行直接加以测试,而不需要打开xcode去特意去run


本人一开始是直接通过xcode自身的命令xcodebuild去跑XCTest,命令如下:

xcodebuild -workspace yourproject.xcworkspace -scheme yourScheme -destination 'platform=iOS simulator,name=iPhone 7,OS=10.3.1’ test

其中yourproject.xcworkspace为你的项目名称,比如你的项目为WeChat.workspace,就为WeChat.xcworkspace(如果你使用cocoapod的话,如果不是用,只需要将workspace改为project即可) yourScheme为你需要调用的scheme(可以通过xcodebuild -list查看)因为这里我们是在做unit test,所以一般都是 xxxxTests这种格式

但经过测试发现,无论怎么样跑,xcodebuild总是会启用xcode的模拟器,哪怕只是一些逻辑代码的测试,与UI完全无关,然后也设置了与模拟器无关(下面会介绍到),但是还是会启动模拟器,这就造成了,模拟器不必要的启动, 所以我经过重重查找,找到了另一款Xcode命令行框架xctool,通过它,来实现不启用模拟器,直接进行本地单元测试.


安装xctool

很简单,我直接通过Homebrew安装

如果你未安装Homebrew 直接安装一下就行,命令如下

ruby -e "$(curl --insecure -fsSLhttps://raw.githubusercontent.com/Homebrew/install/master/install)”

这会直接安装好Homebrew

通过Homebrew安装xctool 直接使用 

brew install xctool


想要不启用模拟器下运行unit test,你需要在xcode中的unit test的target中选择Host Application为None(如下图),之后使用xctool的测试就可以不打开模拟器运行,但是xcodebuild还是会运行模拟器,虽然设置了Host Application之后测试已经与模拟器无关了,但是还是会打开模拟器,这就是我使用xctool的原因.

iOS - 通过命令行使用XCTest对项目进行单元测试(在不启用模拟器的情况下)_第1张图片


使用xctool进行整个Tests测试(如之前有运行模拟器,可将其退出,会发现,不会掉起模拟器)

xctool -workspace yourworkspace.xcworkspace -scheme yourScheme -destination 'platform=iOS simulator,name=iPhone 7 Plus,OS=10.3.1' run-tests -sdk iphonesimulator

测试单个Tests文件,多了only命令

xctool -workspace yourworkspace.xcworkspace -scheme yourScheme -destination 'platform=iOS Simulator,name=iPhone 7 Plus,OS=10.3.1' run-tests -only wenwenTests:HomeTests -sdk iphonesimulator

测试单个Method

xctool -workspace wenwen.xcworkspace -scheme wenwenTests -destination 'platform=iOS Simulator,name=iPhone 7 Plus,OS=10.3.1' run-tests -only wenwenTests:HomeTests/testHome -sdk iphonesimulator

还可以使用*来表示通配符

xctool \

-workspace YourWorkspace.xcworkspace \

-scheme YourScheme \

run-tests -only \ 

SomeTestTarget:SomeTestClassPrefix*,SomeTestClass/testSomeMethodPrefix*

这里有个很重要的技巧,每次使用xctool跑完测试之后,如果你马上修改Tests的测试代码,然后继续测试的。这个时候,需要用xcodebuild 重新编译一下,如若不然,xctool的输出结果还会和上次测试效果相同。因为xctool在Xcode8之后就不支持build了,所以直接用xcodebuild就好了,命令如下:

xcodebuild -workspace yourworkspace.xcworkspace -scheme yourScheme -sdk iphonesimulator -destination 'platform=iOS Simulator,name=iPhone 7,OS=10.3.1' build-for-testing

 小弟不才,第一次发布自己的文章。由于本人文笔不好,所以之前做的东西以及一些研究,基本都是只是当做笔记似的存在自己的印象笔记里。在一位好友交流与鼓励之下,我想要将将自己的一些开发笔记或者总结分享出来。各位大佬,如果走过路过,看到了,有什么不足之处,请一定要指出,让小弟知道自己的错误和不足,在此先谢谢各位大佬了。

你可能感兴趣的:(iOS - 通过命令行使用XCTest对项目进行单元测试(在不启用模拟器的情况下))