在TeamCity中运行nUnit测试时,CurrentCulture错误

Mir*_*toš 5 .net c# teamcity nunit currentculture

我有一个依赖于特定文化的单元测试.

在FixtureSetup,我都设置Thread.CurrentThread.CurrentCultureThread.CurrentThread.CurrentUICulture为需要的值(EN-US).

当我从Resharper运行测试时,它通过了.

当我运行从TeamCity的测试(使用亚军"NUnit的2.4.6"),测试失败,因为 CurrentCulturecs-CZ(我的操作系统的文化).但CurrentUICulture仍然是en-US.

Nek*_*esh 8

您可以强制使用特定的文化来在当前线程中运行测试 System.Threading.Thread.CurrentThread

// set CurrentCulture to Invariant
Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;
// set UI culture to invariant
Thread.CurrentThread.CurrentUICulture = CultureInfo.InvariantCulture;
Run Code Online (Sandbox Code Playgroud)

您还可以使用CultureInfo.GetCultureInfo提供您想要使用的文化.这可能会在SetUp您的测试中失败.

请记住将文化恢复到您的文化中TearDown以确保隔离

[TestFixture]
class MyTest {
  CultureInfo savedCulture;

  [SetUp]
  public void SetUp() {
    savedCulture = Thread.CurrentThread.CurrentCulture;
    Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;
  }

  [TearDown]
  public void TearDown() {
    Thread.CurrentThread.CurrentCulture = savedCulture;
  }
}
Run Code Online (Sandbox Code Playgroud)