2011-05-13 50 views
4

使用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 {} 

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

[assembly: SetCulture ("en-GB")] 
[assembly: SetCulture ("pl-PL")] 

回答

3

可惜的是,现在这是不可能的,但计划未来。

您也可以这样做。

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

    [Test] 
    [SetCulture("pl-PL")] 
    public void ShouldDoSomethingInPoland() 
    { 
    TestSomething(); 
    } 
}

也许这是你想要的东西?

+0

看起来像NUnit 3计划 - https://bugs.launchpad.net/nunit-3.0/+bug/1093505 – 2013-12-13 02:44:28

1

如果你不介意转换,MbUnit已经有这个feature for nearly five years now

您可以在测试,夹具和装配级别应用MultipleCulture属性。

+0

该项目至少半年后就会死亡。 – SOReader 2014-02-03 12:03:01

+1

@SOReader:你想做什么,它现在不做? – 2014-02-03 13:28:02

+0

如果我最终得不到支持功能,就像获得支持一样?我最近学习新的图书馆似乎有风险。 – SOReader 2014-02-19 22:39:58

2

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")); 
    } 

需要注意的是这个单元测试将为deda失败 - 测试各种不同的文化是非常重要的:)