NUnit,针对多种文化进行测试

Chr*_*ers 6 culture nunit

使用NUnit我希望针对多种文化在某个项目中运行所有测试.

该项目处理解析应该是文化中立的数据,以确保我想针对多种文化运行每个测试.

我目前的解决方案是

public abstract class FooTests {
    /* tests go here */
}

[TestFixture, SetCulture ("en-GB")] public class FooTestsEN : FooTests {}
[TestFixture, SetCulture ("pl-PL")] public class FooTestsPL : FooTests {}
Run Code Online (Sandbox Code Playgroud)

理想情况下,我不应该创建这些类,而是使用类似的东西:

[assembly: SetCulture ("en-GB")]
[assembly: SetCulture ("pl-PL")]
Run Code Online (Sandbox Code Playgroud)

Pio*_*rak 5

不幸的是,现在这是不可能的,但计划将来使用.

你也可以这样做.

public class AllCultureTests
{
  private TestSomething() {...}

  [Test]
  [SetCulture("pl-PL")]
  public void ShouldDoSomethingInPoland()
  {
    TestSomething();
  }
}
Run Code Online (Sandbox Code Playgroud)

也许这是你更喜欢的东西?


Pat*_*lph 5

NUnit将一种SetCultureAttribute文化应用于测试,但(尚)不支持多种文化。

TestCaseAttribute您可以通过使用语言代码并手动设置区域性来解决此问题:

    [Test]
    [TestCase("de-DE")]
    [TestCase("en-US")]
    [TestCase("da-DK")]
    public void YourTest(string cultureName)
    {
        var culture = CultureInfo.GetCultureInfo(cultureName);
        Thread.CurrentThread.CurrentCulture = culture;
        Thread.CurrentThread.CurrentUICulture = culture;

        var date = new DateTime(2012, 10, 14);
        string sut = date.ToString("dd/MM/yyyy");
        Assert.That(sut, Is.EqualTo("14/10/2012"));
    }
Run Code Online (Sandbox Code Playgroud)

请注意,此单元测试将失败de-da对不同文化的测试非常重要:)