【问题标题】:Is there a way to change the default thread culture in visual studio team service有没有办法更改 Visual Studio 团队服务中的默认线程文化
【发布时间】:2018-02-03 12:28:57
【问题描述】:

我在美国地区有一个 VSTS 帐户。而且我有一堆单元测试,它们在我的本地服务器上成功运行。但是当部署到 VSTS 时,所有与日期时间相关的测试都失败了。我想这是因为日期时间格式的解释不同,因为我当地使用的是英国格式。因为有相当多的测试项目,而不是单独更改它,有没有办法改变VSTS默认线程的当前文化为英国?我知道改变地区可能会奏效,但还有其他方式吗?

【问题讨论】:

    标签: azure-devops azure-pipelines region vstest currentculture


    【解决方案1】:

    当然,有很多可能,但确保您的应用程序正确处理意外部署到具有不同文化的机器会是一个更好的主意。

    您基本上发现了代码的意外和不受欢迎的行为,或者您检测到您无法在不同的文化中运行。

    我个人会尝试使代码更具弹性,例如明确设置正确的文化并尽可能依赖 InvariantCulture。

    如果您想要简单的出路,您可以执行以下操作之一:

    使用初始化器

    将一种方法添加到您的测试项目和decorate it with the [AssemblyInitializer] attribute:

    [TestClass()]
    public sealed class CultureInitializer
    {
        [AssemblyInitialize()]
        public static void AssemblyInit(TestContext context)
        {
            Thread.CurrentThread.CurrentCulture = new CultureInfo("en-GB");
            Thread.CurrentThread.CurrentUiCulture = new CultureInfo("en-GB");
        }
    }
    

    强制用户个人资料文化设置

    我建议您不要这样做,虽然不应该这样做,但它可能会影响在您的测试之后运行的其他进程、更改输出格式或导致与您现在遇到的类似的其他不需要的行为。

    数据存储在注册表中的以下位置:

    HKEY_CURRENT_USER\Control Panel\International
    

    您需要在开始测试之前更改该值,因为这些值是在启动应用程序时从系统中读取的,除非您正在注册这些值更改时要发出信号的事件,否则您的测试将看不到不同之处。

    在测试开始之前在构建定义中运行一个脚本

    Set-Culture -CultureInfo en-GB
    

    【讨论】:

    • 感谢 jessehouwing 的回答,我更喜欢第二个建议,因为第一个建议对于许多测试项目/类的初始化太多。但是,当我在线使用 VSTS 时,我想我不能做这样的事情吗?谢谢
    • Powershell 可以通过覆盖构建代理用户的现有值来更改区域设置。但是,请修复您的测试。
    • 是的,正如您所见,我已经添加了一个 powershell 脚本来在运行单元测试之前更改文化,现在它正在工作。我应该修复测试,但那是为了以后,非常感谢。
    • 分享脚本会很有帮助。随意编辑我的答案并添加它。
    猜你喜欢
    • 2014-06-06
    • 1970-01-01
    • 1970-01-01
    • 2018-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-06
    • 1970-01-01
    相关资源
    最近更新 更多