Falsches Current beim Laufen eines nUnit Tests in Teamcity
-
12-10-2019 - |
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
.
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.
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;
}