SpecLeaks
创建用于检测Swift中内存泄漏的单元测试。
- SpecLeaks 允许您使用Quick和Nimble创建测试。
- 使用这些Quick和Nimble扩展轻松编写易于阅读的mem leaks测试。
Quick和Nimble 是一个单元测试框架,允许您以更易于阅读的方式编写测试。
你可以测试什么?
- 测试当对象被初始化时是否有泄漏。
- 测试当视图加载时,ViewController是否有泄漏。
- 测试特定方法是否有泄漏
兼容性说明
发布版本:0.1.8
- 语言版本:Swift 5.0
- iOS部署目标:10.0
- Travis CI运行XCode版本:10.2
CocoaPods安装
通过CocoaPods 可以使用SpecLeaks。要安装它,简单地将以下行添加到您的Podfile中
pod 'SpecLeaks'
示例 Cocoapods 项目
该示例项目包含几个单元测试,可以帮助您了解如何使用 SpecLeaks。
要运行示例项目,请克隆仓库,然后首先从示例目录运行 pod install
。
使用 Command+U 运行示例测试。
Carthage 安装
按照这个 指南 将指南添加到您的 Cartfile 中。
github "leandromperez/specleaks"
注意:不要忘记修改测试目标中的框架搜索路径,以包含包含编译后的 .framework 文件的文件夹。
示例 Carthage 项目
在仓库中有一个名为 Carthage-Example 的文件夹,它包含一个配置为使用 Carthage 的项目,名为 Carthage-Tests。
- 注意以下配置条目在构建设置中的如下所示:FRAMEWORK_SEARCH_PATHS = $(SRCROOT)/** $(SRCROOT)/../**
如何编写测试
- 创建一个规范
- 定义一个
it("动作")
块 - 创建一个
LeakTest
,传递一个返回您要测试的对象的块 - 使用
toNot(leak())
或toNot(leakWhen())
编写您的预期
普通对象初始化中的内存泄漏
class SomeObject {}
class SomeOjectTests: QuickSpec {
override func spec() {
describe("SomeObject") {
describe("init") {
it("must not leak"){
let someObject = LeakTest{
return SomeObject()
}
expect(someObject).toNot(leak())
}
}
}
}
}
在UIViewController的viewDidLoad或init中内存泄漏
class SomeViewController : UIViewController {}
class SomeViewControllerTests: QuickSpec {
override func spec() {
describe("SomeViewController"){
describe("viewDidLoad") {
let vc = LeakTest{
return SomeViewController()
}
it("must not leak"){
expect(vc).toNot(leak())
}
}
}
}
}
调用动作时内存泄漏
class SomeObject{
func doSomething(){
}
}
class SomeOjectTests: QuickSpec {
override func spec() {
describe("SomeObject") {
describe("doSomething") {
it("must not leak"){
let someObject = LeakTest{
return SomeObject()
}
let doSomethingIsCalled : (SomeObject) -> () = {obj in
obj.doSomething()
}
expect(someObject).toNot(leakWhen(doSomethingIsCalled))
}
}
}
}
}
作者
许可
SpecLeaks可在MIT许可下获得。有关更多信息,请参阅LICENSE文件。