我在美国地区拥有VSTS帐户。我有一堆单元测试,它在我的本地服务器上成功运行。但是当部署到VSTS时,与日期时间相关的所有测试都会失败。我想这是因为日期时间格式的解释是不同的,因为我的本地使用英国格式。因为有相当多的测试项目,而不是单独更改它,有没有办法将VSTS默认线程的当前文化更改为英国?我知道可能区域的变化可能会成功,但是还有其他任何方式吗?
答案 0 :(得分:2)
当然,有很多是可能的,但确保您的应用程序正确处理意外部署到具有不同文化的计算机上会更好。
您基本上发现了代码的意外和不受欢迎的行为,或者您发现自己无法在不同的文化中运行。
我个人试图让代码更具弹性,例如明确设置正确的文化,并在可能的情况下依赖于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