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

VS2017的.NET Core 2.0 xUnit项目使用UseCultureAttribute报错求解决

解决xUnit中找不到UseCultureAttribute的问题

你遇到的这个错误很常见——因为UseCultureAttribute并不是xUnit核心库自带的特性,你看到的示例里的这个特性是该示例项目自己实现的自定义特性,所以你的项目里没有这个类型才会报错。下面给你两种解决办法:

方法一:复制示例中的自定义UseCultureAttribute实现

直接把示例里的自定义特性代码复制到你的项目中,这样就能和示例一样使用这个特性了:

using System;
using System.Globalization;
using System.Reflection;
using Xunit.Sdk;

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false, Inherited = true)]
public class UseCultureAttribute : BeforeAfterTestAttribute
{
    private readonly CultureInfo _originalCulture;
    private readonly CultureInfo _originalUICulture;

    public UseCultureAttribute(string culture)
        : this(culture, culture)
    {
    }

    public UseCultureAttribute(string culture, string uiCulture)
    {
        _originalCulture = CultureInfo.CurrentCulture;
        _originalUICulture = CultureInfo.CurrentUICulture;

        CultureInfo.CurrentCulture = new CultureInfo(culture);
        CultureInfo.CurrentUICulture = new CultureInfo(uiCulture);
    }

    public override void After(MethodInfo methodUnderTest)
    {
        CultureInfo.CurrentCulture = _originalCulture;
        CultureInfo.CurrentUICulture = _originalUICulture;
    }
}

添加这段代码后,你的测试代码就能正常运行了。

方法二:手动在测试中切换文化

如果不想额外添加自定义类,也可以在测试方法内部手动设置并恢复文化,避免影响其他测试:

[Fact]
public void Test1()
{
    // 保存当前系统的原有文化设置
    var originalCulture = CultureInfo.CurrentCulture;
    var originalUICulture = CultureInfo.CurrentUICulture;

    try
    {
        // 设置测试需要的文化
        CultureInfo.CurrentCulture = new CultureInfo("en-US");
        CultureInfo.CurrentUICulture = new CultureInfo("en-US");

        double a = 5.01;
        string aStr = a.ToString();
        Assert.Equal("5.01", aStr);
    }
    finally
    {
        // 测试结束后恢复原有文化,避免影响其他测试
        CultureInfo.CurrentCulture = originalCulture;
        CultureInfo.CurrentUICulture = originalUICulture;
    }
}

补充说明

xUnit核心库没有内置文化切换的特性,因为这类属于测试场景的辅助功能,通常由开发者根据需求自行实现,或者使用社区提供的扩展包。你看到的示例只是展示了一种自定义特性来简化这类测试的写法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:53:02