Неправильная текущая культура при проведении теста NUNIT в TeamCity

StackOverflow https://stackoverflow.com/questions/4732805

Вопрос

У меня есть единственный тест, который опирается на определенную культуру.

В FitctureSetup я установил оба Thread.CurrentThread.CurrentCulture а также Thread.CurrentThread.CurrentUICulture к желаемому значению (EN-US).

Когда я запускаю тест из Resharper, он проходит.

Когда я запускаю тест из TeamCity (используя бегун «NUNIT 2.4.6»), тест не удается, потому чтоCurrentCulture является cs-CZ (культура моей ОС). Однако 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 использует FictureSetup и Unit-test в разных потоках или каким-то образом модифицируется CurrentUICulture.

Установка оба CurrentUICulture а также CurrentCulture в SetUp (вместо 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