2011-01-19 8 views
5

私は特定の文化に依存する単体テストを持っています。TeamCityでnUnitテストを実行すると間違ったCurrentCulture

FixtureSetupでは、Thread.CurrentThread.CurrentCultureThread.CurrentThread.CurrentUICultureの両方を希望の値(en-US)に設定しました。

Resharperからテストを実行すると、テストが実行されます。

CurrentCulturecs-CZ(私のOSの文化)であるので、私は、テストが失敗し、チームシティー(ランナー「のNUnit 2.4.6」を使用して)からテストを実行します。しかしCurrentUICultureはまだen-USです。

答えて

8

あなたはまた、あなたは利用したいの文化を提供するために、CultureInfo.GetCultureInfoを使用することができますSystem.Threading.Thread.CurrentThread

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

あなたの現在のスレッドでテストを実行するための特定の文化を強制することができます。これは、テストの一部であるSetUpにある可能性があります。

はチームシティーは異なるスレッドでFixtureSetupとユニットテストを実行している、または何らかの形でCurrentUICultureを変更しているように思え分離

[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

これはまさに私がやったことです。 Resharperでユニットテストを実行しているときに動作しますが、TeamCityでユニットテストを実行しても動作しません。 –

+0

TeamCityでnUnitをどのように実行しますか? – Nekresh

+1

'[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

を確保するために、あなたのTearDownの前の1に文化を復元することを忘れないでください。

CurrentCultureSetUpFixtureSetupの代わりに)に設定すると問題が解決しました。私は設定とNUnitの2.4.2以降では、個々の試験方法

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

私のテストでは、あなたはSetCulture属性を使用することができます。

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

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

この例は、以下のリンクから取られています。詳細はリンクを参照してください。

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

+1

本当にカルチャーを復元する必要がありますか?私はすぐに試してみましたが、NUnitフレームワークは他のテストに漏れないようにカルチャを復元するようです。 – Dejan

+1

異なるテスト間でNUnitがより良い分離を行うかもしれません。 VSTest.Consoleを実行しているときにMicrosoft Testsに問題がありました。 –

1

内CurrentUICultureのをリセットしました

関連する問題