使用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")]
答案 0 :(得分:5)
不幸的是,现在这是不可能的,但计划将来使用。
您也可以这样做。
public class AllCultureTests
{
private TestSomething() {...}
[Test]
[SetCulture("pl-PL")]
public void ShouldDoSomethingInPoland()
{
TestSomething();
}
}
也许这是你更喜欢的东西?
答案 1 :(得分:3)
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"));
}
请注意,de
和da
的单元测试失败 - 对不同文化的测试非常重要:)
答案 2 :(得分:1)
如果你不介意转换,MbUnit已经有feature for nearly five years now。
您可以在测试,夹具和装配级别应用MultipleCulture
属性。