You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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方法中传入自定义序列化委托,统一格式化所有组合的执行结果
  • Combinatorial API在Verify 18.0及以上版本的核心库中内置,低版本需要先升级依赖才能使用
  • 默认会自动对参数组合做去重、排序,避免因为参数顺序变动导致的无意义快照变更

内容的提问来源于stack exchange,提问作者boa_hancock

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 20:36:33