Неправильная CurrentCulture при запуске теста nUnit в TeamCity - PullRequest
5 голосов
/ 19 января 2011

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

В FixtureSetup я устанавливаю Thread.CurrentThread.CurrentCulture и Thread.CurrentThread.CurrentUICulture на нужное значение (en-US).

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

Когда я запускаю тест из TeamCity (используя бегунок "NUnit 2.4.6"), тест не пройден, потому что CurrentCulture равен cs-CZ (культура моей ОС).Однако CurrentUICulture все еще en-US.

Ответы [ 4 ]

8 голосов
/ 19 января 2011

Вы можете настроить конкретную культуру для запуска ваших тестов в текущей ветке 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;
  }
}
3 голосов
/ 15 февраля 2011

Кажется, что TeamCity запускает FixtureSetup и юнит-тестирование в разных потоках или как-то модифицирует CurrentUICulture.

Настройка CurrentUICulture и CurrentCulture в SetUp (вместо FixtureSetup) решила проблему.

2 голосов
/ 09 декабря 2016

Начиная с 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

1 голос
/ 18 апреля 2013

В моем тесте я установил и сбросил CurrentUICulture в рамках отдельного метода теста

            var tempCurrentUICulture = Thread.CurrentThread.CurrentUICulture;
            try
            {
                Thread.CurrentThread.CurrentUICulture = new CultureInfo("zh-HK" );
                 actual = target.MethodToTest(resourceSet, localeId);
            }
            finally
            {
                Thread.CurrentThread.CurrentUICulture = tempCurrentUICulture;
            }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...