Domanda

Ho un'unità-test che si basa su una cultura specifica.

In FixtureSetup, ho impostato sia Thread.CurrentThread.CurrentCulture e Thread.CurrentThread.CurrentUICulture al valore desiderato (en-US).

Quando eseguo il test da ReSharper, che passa.

Quando eseguo il test da TeamCity (utilizzando il corridore "NUnit 2.4.6"), il test ha esito negativo, a causa CurrentCulture è cs-CZ (la cultura del mio sistema operativo). Tuttavia CurrentUICulture è ancora en-US.

È stato utile?

Soluzione

È possibile forzare una cultura specifica per l'esecuzione i test nella tua System.Threading.Thread.CurrentThread thread corrente

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

È inoltre possibile utilizzare CultureInfo.GetCultureInfo per offrire la cultura che si desidera utilizzare. Questo può essere giù nella parte SetUp di test.

Ricordarsi di riportare la cultura a quella precedente nel vostro TearDown per garantire l'isolamento

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

Altri suggerimenti

Sembra TeamCity esegue FixtureSetup e unità-test in diversi thread, o in qualche modo modificando CurrentUICulture.

Impostazione sia CurrentUICulture e CurrentCulture in SetUp (anziché FixtureSetup) risolto il problema.

A partire da NUnit 2.4.2, è possibile utilizzare l'attributo setCulture.

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

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

L'esempio è tratto dal link sottostante. Si prega di consultare anche il link per ulteriori dettagli.

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

Nella mia prova ho impostato e CurrentUICulture ripristino all'interno di singoli metodi sperimentali

            var tempCurrentUICulture = Thread.CurrentThread.CurrentUICulture;
            try
            {
                Thread.CurrentThread.CurrentUICulture = new CultureInfo("zh-HK" );
                 actual = target.MethodToTest(resourceSet, localeId);
            }
            finally
            {
                Thread.CurrentThread.CurrentUICulture = tempCurrentUICulture;
            }
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top