質問

特定の文化に依存するユニットテストがあります。

FixTuresetupでは、両方を設定します Thread.CurrentThread.CurrentCultureThread.CurrentThread.CurrentUICulture 目的の値(EN-US)に。

Resharperからテストを実行すると、合格します。

TeamCityからテストを実行すると(ランナー「Nunit 2.4.6 "を使用して)、テストが失敗します。CurrentCulturecs-CZ (私のOSの文化)。でも CurrentUICulture まだです en-US.

役に立ちましたか?

解決

現在のスレッドでテストを実行するための特定の文化を強制することができます System.Threading.Thread.CurrentThread

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

使用することもできます CultureInfo.GetCultureInfo 使用したい文化を提供するため。これはにダウンする可能性があります SetUp テストの一部。

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

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

他のヒント

TeamCityは、さまざまなスレッドでFIXTURESTUPとユニットテストを実行しているか、どういうわけか変更しているようです CurrentUICulture.

両方を設定します CurrentUICultureCurrentCultureSetUp (それ以外の FixtureSetup) 問題を解決しました。

Nunit 2.4.2から始めて、SetCulture属性を使用できます。

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

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

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

https://github.com/nunit/docs/wiki/setculture-attribute

私のテストでは、個々のテスト方法内で現在の培養を設定してリセットしました

      

            var tempCurrentUICulture = Thread.CurrentThread.CurrentUICulture;
            try
            {
                Thread.CurrentThread.CurrentUICulture = new CultureInfo("zh-HK" );
                 actual = target.MethodToTest(resourceSet, localeId);
            }
            finally
            {
                Thread.CurrentThread.CurrentUICulture = tempCurrentUICulture;
            }
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top