2011-01-19 11 views
5

Tengo una prueba de unidad que se basa en una cultura específica.Wrong CurrentCulture al ejecutar una prueba nUnit en TeamCity

En FixtureSetup, establecí Thread.CurrentThread.CurrentCulture y Thread.CurrentThread.CurrentUICulture en el valor deseado (en-US).

Cuando ejecuto la prueba de Resharper, pasa.

Cuando ejecuto la prueba de TeamCity (utilizando el corredor "NUnit 2.4.6"), la prueba falla, porque CurrentCulture es cs-CZ (la cultura de mi sistema operativo). Sin embargo, CurrentUICulture sigue siendo en-US.

Respuesta

8

Puede forzar una cultura específica para el funcionamiento de sus pruebas en su hilo actual System.Threading.Thread.CurrentThread

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

También se puede utilizar para proporcionar CultureInfo.GetCultureInfo la cultura que desea utilizar. Esto puede ser negativo en la parte SetUp de sus pruebas.

Recuerde restaurar la cultura a la anterior en su aislamiento TearDown para asegurar

[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

Esto es exactamente lo que he hecho. Funciona cuando ejecuto mis pruebas unitarias en Resharper, no cuando las ejecuto en TeamCity. –

+0

¿Cómo ejecutas nUnit en TeamCity? – Nekresh

+1

¿Ha intentado utilizar el atributo '[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

Parece que se está ejecutando TeamCity FixtureSetup y la unidad de prueba en diferentes hilos, o de alguna manera modificar CurrentUICulture.

Al establecer CurrentUICulture y CurrentCulture en SetUp (en lugar de FixtureSetup) se solucionó el problema.

1

En mi prueba He configurado y restablecer CurrentUICulture dentro método de prueba individual

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

¿Estás seguro de que necesitas restaurar la cultura? Intenté rápidamente y me parece que el marco NUnit restaura la cultura para que no se filtre en otras pruebas. – Dejan

+1

Puede ser NUnit hace un mejor aislamiento entre las diferentes pruebas. Tuve un problema con las pruebas de Microsoft al ejecutar VSTest.Console. –

1

A partir de NUnit 2.4.2, puede utilizar el atributo setCulture.

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

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

El ejemplo se toma del siguiente enlace. Por favor, también consulte el enlace para más detalles.

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

Cuestiones relacionadas