Fuzzer
当您的服务器撒谎时不要崩溃
这是什么呢?
我们都知道 API 有规范。我们都会编写测试来覆盖“高兴路径”和覆盖“不幸路径”,当我们操作 API 时。
似乎如果我们有测试并且遵循规范,我们就已经很安全了。实际上并非如此。通常在理论上运行良好,但在实践中并不真正有效。
我们可以编写大量的测试来覆盖所有边缘情况,但这既费时又容易出错。最佳选择是自动化此过程。
示例
- (void)test {
NSDictionary *sample = @{
@“name” : @“John Doe”,
@“age” : @42
};
UserDeserializer *deserializer = [UserDeserializer new];
FZRRunner *runner = [FZRRunner runnerWithBuiltinMutationsForSample:sample];
NSArray *reports = [runner enumerateMutantsUsingBlock:^(NSDictionary *mutant) {
[deserializer deserializeUser:mutant];
}];
XCTAssertEqual(reports.count, 0);
}
安装
维护者所使用的组件
获取Fuzzer的最新.make文件。
CocoaPods
pod 'Fuzzer', '0.3.0'
Carthage
将以下行添加到您的Cartfile
中,以获取Fuzzer的最新版本。
github "AlexDenisov/Fuzzer"
如果您想要安装Fuzzer的特定版本或进行任何高级设置,请参阅Carthage文档。
Note : Carthage support has been introduded in v0.3.1
So older versions of Fuzzer cannot be installd with Carthage.
从源码构建
通常情况下,您不需要这样做。但如果需要,从源码构建的一种推荐方法是使用子项目。
您可以根据需要使用以下任何一个项目目标
Fuzzer-lib-ios-static
- 用于旧项目(至iOS 6
)Fuzzer-iOS-dynamic
- 用于swift和现代项目
即插即用
内建变异
删除节点变异
从字典中随机删除一个键/值对
替换节点变异
随机选取字典中的键并使用节点替换提供的值替换其值
内建替换
- 整型替换:将值替换为“随机”整型
- 浮点替换:将值替换为“随机”浮点数
- 字符串替换:将值替换为“随机”字符串
- 布尔替换:将值替换为“随机”布尔值
- 数组替换:将值替换为“随机”数组
- 字典替换:将值替换为“随机”字典
- null替换:将值替换为
[NSNull null]
- nil替换:将值替换为
nil
(导致从字典中删除键/值)
许可证
MIT,详细信息请参阅LICENSE