MbUnit 有一个很棒的属性:MultipleCultureAttribute。
我想知道在 MSTest 中是否有一种简单的方法可以做到这一点?到目前为止,我能想到的最好的方法是:
- 将实际测试代码外部化为私有方法
- 保存当前文化
- 设置文化并调用私有方法(对每种文化重复)
- 最后,回归原始文化
充其量,它可以被描述为丑陋……而且冗长。
MbUnit 有一个很棒的属性:MultipleCultureAttribute。
我想知道在 MSTest 中是否有一种简单的方法可以做到这一点?到目前为止,我能想到的最好的方法是:
充其量,它可以被描述为丑陋……而且冗长。
最简单的方法可能是使用匿名委托,但请记住,MSTest 会将其视为单个测试,因此可能难以区分不同文化的结果。
例如。匿名委托方法的粗略代码。
public static class MultipleCultures
{
public static void Do(Action action, params CultureInfo[] cultures)
{
CultureInfo originalCulture = Thread.CurrentCulture;
try
{
foreach (CultureInfo culture in cultures)
{
Thread.CurrentCulture = culture;
try
{
action();
}
catch
{
Console.WriteLine("Failed while running test with culture '{0}'.", culture.Name);
throw;
}
}
}
finally
{
Thread.CurrentCulture = originalCulture;
}
}
}
[TestClass]
public class Fixture
{
[TestMethod]
public void Test()
{
MultipleCultures.Do(() =>
{
// test code...
}, CultureInfo.InvariantCulture, CultureInfo.GetCulture("en-GB"));
}
}