Verify库如何实现VerifyAllCombinations等效组合校验功能
结论
Verify库原生支持多参数组合审批(组合快照校验)能力,可以完全覆盖你提到的CombinationApprovals.VerifyAllCombinations对应的全参数笛卡尔积遍历校验需求,不需要依赖其他类库。
对等实现代码
你贴的是ApprovalTests框架下的组合校验写法,Verify中提供了行为完全对齐的Combinatorial校验方法,会自动遍历所有传入参数集合的全组合,逐个调用你指定的业务方法,收集所有执行结果后统一做快照比对,和你原有逻辑的执行效果完全一致。
对应你给出的参数场景,实现代码如下:
// 引入对应测试框架的Verify依赖即可,xUnit/NUnit/MSTest均支持 using VerifyXunit; using static VerifyXunit.Verifier; // 测试类标记Verify特性 [UsesVerify] public class UpdateQualityTests { [Fact] public Task 全参数组合校验更新逻辑() { // 按顺序传入你需要遍历的所有参数集合,和原代码参数一一对应 var itemNames = new string[] { "foo", "Aged Brie", "Backstage passes to a TAFKAL80ETC concert", "Sulfuras, Hand of Ragnaros" }; var sellInList = new int[] { -1, 0, 5, 10, 12 }; var qualityList = new int[] { -1, 0, 49, 51 }; // 调用组合校验API,第一个参数传入你要执行的业务方法,后面依次传参集合 return Combinatorial( doUpdateQuality: DoUpdateQuality, itemNames, sellInList, qualityList ); } // 你的原有业务方法,保持原有签名即可 private Item DoUpdateQuality(string itemName, int sellIn, int quality) { var item = new Item { Name = itemName, SellIn = sellIn, Quality = quality }; var gildedRose = new GildedRose(new List<Item> { item }); gildedRose.UpdateQuality(); return item; } }
使用注意事项
- 首次运行测试时,Verify会自动生成和测试类同目录的快照文件,你确认结果符合预期后,后续测试运行会自动和已保存的快照做对比
- 如果需要调整快照的输出格式(比如和原有ApprovalTests的文本格式完全对齐),可以在
Combinatorial方法中传入自定义序列化委托,统一格式化所有组合的执行结果 CombinatorialAPI在Verify 18.0及以上版本的核心库中内置,低版本需要先升级依赖才能使用- 默认会自动对参数组合做去重、排序,避免因为参数顺序变动导致的无意义快照变更
内容的提问来源于stack exchange,提问作者boa_hancock
相关产品推荐
相关产品推荐

