2011-01-19 10 views
5

Ho un test unitario che si basa su una cultura specifica.Wrong CurrentCulture quando si esegue un test nUnit in TeamCity

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

Quando eseguo il test da Resharper, passa.

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

risposta

8

è possibile forzare una cultura specifica per l'esecuzione i test nel vostro thread corrente System.Threading.Thread.CurrentThread

// 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 dei tuoi test.

Ricordati di ripristinare la cultura a quella precedente nel tuo isolamento TearDown per garantire

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

Questo è esattamente ciò che ho fatto. Funziona quando eseguo i miei test unitari in Resharper, non quando li eseguo in TeamCity. –

+0

Come si esegue nUnit in TeamCity? – Nekresh

+1

Hai provato a usare l'attributo '[SetCulture (" en-US ")]'? [http://www.nunit.org/index.php?p=setCulture&r=2.5.9](http://www.nunit.org/index.php?p=setCulture&r=2.5.9) – Nekresh

3

Sembra TeamCity è in esecuzione FixtureSetup e l'unità di test in diversi thread, o in qualche modo modifica CurrentUICulture.

L'impostazione di entrambi CurrentUICulture e CurrentCulture in SetUp (anziché FixtureSetup) ha risolto il problema.

1

Nella mia prova ho attivata e disattivata in CurrentUICulture nel metodo di prova individuale

  var tempCurrentUICulture = Thread.CurrentThread.CurrentUICulture; 
            try 
            { 
                Thread.CurrentThread.CurrentUICulture = new CultureInfo("zh-HK"); 
                 actual = target.MethodToTest(resourceSet, localeId); 
            } 
            finally 
            { 
                Thread.CurrentThread.CurrentUICulture = tempCurrentUICulture; 
            } 
+1

Sei sicuro di aver bisogno di ripristinare la cultura? Ho provato in fretta e mi sembra che il framework NUnit ripristini la cultura in modo che non colga in altri test. – Dejan

+1

PU be essere NUnit migliora l'isolamento tra diversi test. Ho avuto un problema con i test di Microsoft durante l'esecuzione di VSTest.Console. –

1

partire con 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 collegamento seguente. Si prega di fare riferimento al link per ulteriori dettagli.

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