【问题标题】:xUnit Culture Aware TestingxUnit 文化感知测试
【发布时间】:2018-11-05 07:54:09
【问题描述】:

我在一分钟前在 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);
}

【问题讨论】:

  • @JonathonChase,感谢您的评论。我搜索了一下,发现 CulturedTheoryCulturedFact (github.com/xunit/xunit/tree/master/test/test.utility/…) 。但是,这些注释也不起作用。你知道文化意识测试有什么好的解决方案吗?
  • 是的,看看我发布的第二个链接。这是UseCultureAttribute 的实现代码。您应该可以将其放入您的项目中并继续。
  • 在我的问题中,我也发布了相同的链接。但是,我想知道,是否有内置解决方案或支持的扩展(另一个 nuget 包)?

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


【解决方案1】:

在撰写本文时,我也无法在 .NET Core 2.0 中找到它。 这是一个示例(基于您问题的 cmets 中给出的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;
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-10
    • 2019-10-20
    • 2015-04-25
    • 2021-04-20
    相关资源
    最近更新 更多