SpecLeaks 0.1.8

SpecLeaks 0.1.8

Leandro Manuel Perez维护。



 
依赖
Quick>= 0
Nimble>= 0
 

SpecLeaks 0.1.8

SpecLeaks

Version License Platform Build Status

创建用于检测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)/../**

如何编写测试

  1. 创建一个规范
  2. 定义一个 it("动作")
  3. 创建一个 LeakTest,传递一个返回您要测试的对象的块
  4. 使用 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))
                }
            }
        }
    }
}

作者

@bataleandro Leandro Perez

许可

SpecLeaks可在MIT许可下获得。有关更多信息,请参阅LICENSE文件。