Question

J'ai une unité de test qui repose sur une culture spécifique.

FixtureSetup, je mis à la fois Thread.CurrentThread.CurrentCulture et Thread.CurrentThread.CurrentUICulture à la valeur désirée (en-US).

Quand je lance le test de ReSharper, il passe.

Quand je lance le test de TeamCity (en utilisant le coureur "NUnit 2.4.6"), le test échoue, car CurrentCulture est cs-CZ (la culture de mon OS). Cependant CurrentUICulture est encore en-US.

Était-ce utile?

La solution

Vous pouvez forcer une culture spécifique pour exécuter vos tests dans votre System.Threading.Thread.CurrentThread courant de fil

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

Vous pouvez également utiliser CultureInfo.GetCultureInfo pour fournir la culture que vous souhaitez utiliser. Cela peut être dans la partie SetUp de vos tests.

Rappelez-vous de restaurer la culture à la précédente dans votre TearDown pour assurer l'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;
  }
}

Autres conseils

Il semble que TeamCity est en cours d'exécution et l'unité FixtureSetup test dans différents fils, ou de modifier d'une certaine manière CurrentUICulture.

Réglage des deux CurrentUICulture et CurrentCulture dans SetUp (au lieu de FixtureSetup) a résolu le problème.

A partir de NUnit 2.4.2, vous pouvez utiliser l'attribut setCulture.

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

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

L'exemple est pris à partir du lien ci-dessous. S'il vous plaît se référer également le lien pour plus de détails.

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

Dans mon test, je l'ai remis à zéro et CurrentUICulture réglé au sein de la méthode de test individuel

            var tempCurrentUICulture = Thread.CurrentThread.CurrentUICulture;
            try
            {
                Thread.CurrentThread.CurrentUICulture = new CultureInfo("zh-HK" );
                 actual = target.MethodToTest(resourceSet, localeId);
            }
            finally
            {
                Thread.CurrentThread.CurrentUICulture = tempCurrentUICulture;
            }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top