xUnit Culture Aware Testing

时间:2018-05-25 21:48:07

标签: c# unit-testing asp.net-core-2.0 data-annotations xunit

我在一分钟前在Visual Studio 2017上创建了一个新的xunit测试项目。该项目包含xunit nuget包,它是net-core 2.0的2.3.1版本

我在xUnit Sample看到了注释的用法;但是,当我尝试使用UseCulture注释时,我遇到了这样的错误:

  

类型或命名空间名称' UseCultureAttribute'无法找到。

我错过了什么?

[Fact, UseCulture("en-US")]
public void Test1()
{
    double a = 5.01;
    string aStr = a.ToString();

    Assert.Equal("5.01", aStr);
}

1 个答案:

答案 0 :(得分:0)

在撰写本文时,我在.NET Core 2.0中都找不到。 这是一个示例(基于问题注释中给出的link)。 您只需要添加xunit.core nuget包即可完成这项工作。

我的示例在测试之前将其设置为InvariantCulture(然后将其还原),您可以将其调整为所需的区域性,或使用link中提供的功能更广泛的选项。

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false, Inherited = true)]
public class UseInvariantCultureAttribute : BeforeAfterTestAttribute
{
    private CultureInfo originalCulture;
    private CultureInfo originalUICulture;

    public override void Before(MethodInfo methodUnderTest)
    {
        this.originalCulture = Thread.CurrentThread.CurrentCulture;
        this.originalUICulture = Thread.CurrentThread.CurrentUICulture;

        Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;
        Thread.CurrentThread.CurrentUICulture = CultureInfo.InvariantCulture;
    }

    public override void After(MethodInfo methodUnderTest)
    {
        Thread.CurrentThread.CurrentCulture = this.originalCulture;
        Thread.CurrentThread.CurrentUICulture = this.originalUICulture;
    }
}