Frage

habe ich einen Unit-Test, der auf einer bestimmten Kultur beruht.

In FixtureSetup, habe ich sowohl Thread.CurrentThread.CurrentCulture und Thread.CurrentThread.CurrentUICulture auf den gewünschten Wert (en-US).

Wenn ich den Test von ReSharper laufen, es geht.

Wenn ich den Test von Teamcity (mit dem Läufer „NUnit 2.4.6“) ausführen, schlägt der Test fehl, weil CurrentCulture ist cs-CZ (die Kultur meines OS). CurrentUICulture Allerdings ist noch en-US.

War es hilfreich?

Lösung

Sie können eine bestimmte Kultur zwingen, für Ihre Tests in Ihrem aktuellen Thread System.Threading.Thread.CurrentThread läuft

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

Sie können auch CultureInfo.GetCultureInfo verwenden, um die Kultur, die Sie verwenden möchten, zur Verfügung zu stellen. Dies kann in dem SetUp Teil Ihres Tests gelegt.

Denken Sie daran, die Kultur mit dem vorherigen in Ihrem TearDown wiederherzustellen Isolation zu gewährleisten

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

Andere Tipps

Es scheint, wie Teamcity ist FixtureSetup und Unit-Test in verschiedenen Threads ausgeführt wird, oder irgendwie CurrentUICulture ändern.

sowohl CurrentUICulture und CurrentCulture in SetUp Einstellung (statt FixtureSetup) wurde das Problem behoben.

Beginnend mit NUnit 2.4.2 können Sie das SetCulture Attribut verwenden.

namespace NUnit.Tests
{
  using System;
  using NUnit.Framework;

  [TestFixture]
  [SetCulture("fr-FR")]
  public class FrenchCultureTests
  {
    // ...
  }
}

Das Beispiel wird über den Link unten genommen. Bitte beachten Sie auch den Link für weitere Informationen.

https://github.com/nunit/docs/wiki/SetCulture-Attribute

In meinem Test habe ich gesetzt und zurückgesetzt CurrentUICulture innerhalb der einzelnen Testverfahren

            var tempCurrentUICulture = Thread.CurrentThread.CurrentUICulture;
            try
            {
                Thread.CurrentThread.CurrentUICulture = new CultureInfo("zh-HK" );
                 actual = target.MethodToTest(resourceSet, localeId);
            }
            finally
            {
                Thread.CurrentThread.CurrentUICulture = tempCurrentUICulture;
            }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top