Warm tip: This article is reproduced from serverfault.com, please click

Wrong CurrentCulture when running an nUnit test in TeamCity

发布于 2011-01-19 07:35:17

I have a unit-test that relies on a specific culture.

In FixtureSetup, I set both Thread.CurrentThread.CurrentCulture and Thread.CurrentThread.CurrentUICulture to the desired value (en-US).

When I run the test from Resharper, it passes.

When I run the test from TeamCity (using the runner "NUnit 2.4.6"), the test fails, because CurrentCulture is cs-CZ (the culture of my OS). However CurrentUICulture is still en-US.

Questioner
Miroslav Bajtoš
Viewed
0
Nekresh 2011-01-19 16:26:33

You can force a specific culture for running your tests in your current thread System.Threading.Thread.CurrentThread

// set CurrentCulture to Invariant
Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;
// set UI culture to invariant
Thread.CurrentThread.CurrentUICulture = CultureInfo.InvariantCulture;

You can also use CultureInfo.GetCultureInfo to provide the culture you want to use. This can be down in the SetUp part of your tests.

Remember to restore the culture to the previous one in your TearDown to ensure isolation

[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;
  }
}