FataMorgana 2.0.1

FataMorgana 2.0.1

Valeriy Bezuglyy 维护。



  • 作者:
  • Valeriy Bezuglyy

FataMorgana

License GitHub issues

Cocoapods release Carthage compatible GitHub release

FataMorgana使用Mirage库生成模拟。

它使用Sourcery作为代码生成器并提供了自己的模板。

特性

使用FataMorgana可以生成类和协议模拟。需要Sourcery 0.18.0Mirage 2.0+


安装

  1. 安装Sourcery。(我使用的是homebrew版本)
  2. 下载Mirage和模板
  3. 创建sourcery.yml
  4. 为模拟生成添加构建阶段

Carthage

将这些行添加到您的Cartfile中,运行carthage update --platform iOS并将二进制文件链接到目标,就像您通常所做的那样)

github "valnoc/Mirage" ~> 2.0
github "valnoc/FataMorgana" ~> 2.0

所需的Mock.stencil位于模板文件夹中

Cocoapods

将此行添加到您的Podfile中的测试目标下,并运行pod update

pod 'FataMorgana' ~> 2.0

Podfile示例

target 'MainTarget' do
  ...
  target 'TestTarget' do
    inherit! :search_paths
    pod 'FataMorgana'
  end
end

源文件

将/FataMoragana/Template文件夹复制到您的项目目录。将Mirage源文件复制到您的项目目录。


使用(简短信息)

  1. 设置.sourcery.yml
  2. 向测试目标添加构建阶段脚本
  3. 标记要模拟的对象
  4. 添加Any.swift文件

类/协议的注解

mirageMock - 生成模拟

miragePartialMock - 生成部分模拟

方法的注解

mirageSel - 设置别名。 mirageSel=myBestFunction

mirageSkip - 在生成类模拟时跳过此方法

mirageReturn - 返回函数的名称。 mirageReturn=anyString()


使用(完整信息)

1. 设置 .sourcery.yml

sources:
  - ./../Example
templates:
  - ./../Template/
output: 
  ./../Example/ExampleTests/mocks/generated
args:
  imports: 
    - framework: Example
      testable: true
    - Foundation
  returnOptionalAsNil: false
  1. source

列举源文件夹

  1. 模板

设置模板文件夹 (Pods/FataMorgana)

  1. 输出

设置生成文件的输出文件夹。每个模拟都生成到单独的文件中。

  1. 参数

导入 - 列举模块的额外导入。如果此模块需要 @testable 前缀,则使用 testable: true returnOptionalAsNil - 如果返回类型为可选,则返回 nil

2. 将构建阶段脚本添加到 Tests 目标

sourcery --config "${SRCROOT}"

如果需要,您可以用不同的配置多次调用 sourcery。

3. 标记待模拟的对象

在对象前添加注释 mirageMock 以生成其 (类或协议) 的模拟。

//sourcery: mirageMock
protocol SecondService {
}

在对象前添加注释 miragePartial 以生成其模拟。

//sourcery: miragePartial
class FirstService {
}

4. 添加 Any.swift 文件

所有方法调用 any() 函数返回默认值。在 Any.swift 文件中实现这些函数。

特殊情况

相同方法名

使用注解 mirageSel

func foo3(number: NSNumber, closure: @escaping Closure1)
func foo3(string: String, closure: @escaping Closure1)

这些方法将为 Mirage 生成相同字符串选择器。在这种情况下,您可以使用注解为方法提供备用名称

func foo3(number: NSNumber, closure: @escaping Closure1)
//sourcery: mirageSel=foo3str
func foo3(string: String, closure: @escaping Closure1)

跳过方法

使用注解 mirageSkip

如果不想在模拟中出现,请用此注解标记方法。

//sourcery: mirageSkip
func skipMe() {
}

许可

FataMorgana 在 MIT 许可下提供。