Genything 是一个致力于轻松且可组合地生成随机数据的库,无论多么复杂。
Genything 可以与 Trickery 结合使用,Trickery 提供了一个不断增长的预制生成器库,用于模拟真实世界的信息。
这两个库都可以用于代码测试、快速原型设计、演示应用程序、UI 测试等等。发挥你的创造力!
Generator
是 Genything 的核心。
public protocol Generator {
associatedtype T
func next(_ randomSource: RandomSource) -> T
}
它定义了一个类型,该类型具有使用 RandomSource
生成值的函数。 RandomSource
用于跟踪和改变任何 RandomNumberGenerator 实例,允许你控制想要的随机性多少。
一个布尔生成器可能看起来像这样
struct BoolGenerator: Generator {
func next(_ randomSource: RandomSource) -> T {
Bool.random(using: &randomSource.rng)
}
}
或
AnyGenerator<Bool> { randomSource in
Bool.random(using: &randomSource.rng)
}
或者,我们可以利用 Genything 对大多数标准 Swift 类型(包括 Bool
)的任意一致性
Bool.arbitrary
Genything 提供了许多方法来在 Generators
命名空间下 创建你自己的生成器,并且 Generator
类型被许多 运算符扩展,你可以使用它们来进一步改变和控制生成的生成器。
Arbitary
协议允许一个 Type 定义一个适合生成其所有值的生成器。
以 Swift 的 Bool
为例,它的 Arbitrary 定义为
extension Bool: Arbitrary {
public static var arbitrary: AnyGenerator<Bool> {
[true, false].arbitrary
}
}
现在,当组合更复杂的任意类型时,我们可以自动使用这个定义
struct Foo {
let bar: Bool
// ...
}
extension Transaction: Arbitrary {
public static var arbitrary: AnyGenerator<Bool> {
Gen.compose { generate in
Foo(
bar: generate(), // Will return true/false like a coin-flip for each generated value
//...
)
}
}
}
这些可以用于不变式测试、存根 API 响应、作为预览数据等等...
Genything 与 Trickery 一起提供,Trickery 是一个生成器集合,适用于根据真实世界条件而非仅由类型强制执行的条件生成伪真实数据。
考虑一个电话号码。 类型为 String
的电话号码具有关于长度、格式、允许字符的规则。 然而,任意类型 String
最多包含对其长度的定义
Genything 为 XCTestCase
提供了两个扩展,我们建议你将它们用作属性测试的主要方法。
testAll(generator:config:file:line:body)
testAllSatisfy(generator:config:file:line:predicate)
查看我们的 Playground 指南
Genything 很高兴与其他开源库结合使用!
生成任何 SF Symbol
import SFSafeSymbols
let sfSymbolGen: AnyGenerator<SFSymbol> = SFSymbol.arbitrary.map { $0.rawValue }
pod 'Genything'
pod 'Trickery' # Optional library of realistic fake data (Fake)
pod 'GenythingTest' # Optional extensions for property testing (testAll, testAllSatisfy)
在你的根目录中创建一个 Package.swift
文件并添加
dependencies: [
.package(url: "https://github.com/justeattakeaway/genything.git", .upToNextMajor(from: "1.0.0"))
]
然后添加你想要的包
Genything 项目由 SkipTheDishes 拥有和维护,SkipTheDishes 是 Just Eat Takeaway.com 的子公司。
请阅读 贡献指南
Genything 站在巨人的肩膀上。 请查看这些其他的库和资源!
参见:许可证
Apache License Version 2.0, January 2004 https://apache.ac.cn/licenses/