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

DataTestMethod中DataRow用变量插值遇CS0182错误的解决办法

解决DataTestMethod中动态生成DataRow的CS0182错误

错误原因

DataRow特性的参数必须是编译时常量,而DateTimeOffset.UtcNow是运行时才能确定的值,包含它的插值字符串无法被编译器解析为常量,因此触发CS0182错误。

解决方案

方案1:使用DynamicData生成动态测试数据(适用于需要运行时变量的场景)

用DynamicData特性替代DataRow,从静态属性/方法中动态生成测试输入:

// 定义静态测试数据源
public static IEnumerable<object[]> AssignedAppsTestData
{
    get
    {
        // 生成包含当前时间的测试字符串
        yield return new object[] 
        {
            $"::::L:f9cda16c-50d8-4a4b-9b8c-a80b1915c3e7;Expires:{DateTimeOffset.UtcNow:u};"
        };
        // 可添加更多测试用例
        yield return new object[] 
        {
            $"::::L:another-guid;Expires:{DateTimeOffset.UtcNow.AddHours(1):u};"
        };
    }
}

// 测试方法绑定动态数据源
[DataTestMethod]
[DynamicData(nameof(AssignedAppsTestData), DynamicDataSourceType.Property)]
public void WhenSomeAssignedAppsStringHasMissingAppTypes(string cacheString)
{          
    // 捕获预期异常并验证结果
    var reconstructed = null;
    Assert.ThrowsException<FormatException>(() => reconstructed = AppsWithExplicitAssignmentsCacheItem.Create(cacheString));
    Assert.IsNull(reconstructed);
}

方案2:使用固定常量值(适用于无需动态变量的场景)

如果测试不需要真实的当前时间,直接用固定的时间字符串作为常量参数:

[DataTestMethod]
[DataRow(@"::::L:f9cda16c-50d8-4a4b-9b8c-a80b1915c3e7;Expires:2024-05-20 12:00:00Z;")]
[DataRow(@"::::L:f9cda16c-50d8-4a4b-9b8c-a80b1915c3e7;Expires:2024-12-31 23:59:59Z;")]
public void WhenSomeAssignedAppsStringHasMissingAppTypes(string cacheString)
{          
    Assert.ThrowsException<FormatException>(() => AppsWithExplicitAssignmentsCacheItem.Create(cacheString));
    var reconstructed = AppsWithExplicitAssignmentsCacheItem.Create(cacheString);
    Assert.IsNull(reconstructed);
}

关键说明

  • DynamicData支持从静态属性、方法或字段获取测试数据,允许使用运行时计算的值;
  • 若测试场景对时间精度要求不高,固定常量值的方案更简洁,避免动态数据的复杂度;
  • 原测试代码中,若Create方法抛出异常,后续的Assert.IsNull不会执行,需调整逻辑确保异常捕获与结果验证的正确性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 03:15:12