如何在MSTest中模拟MbUnit的[MultipleCulture]属性?

时间:2009-08-12 19:51:30

标签: mstest culture mbunit

MbUnit有一个很好的属性:MultipleCultureAttribute

我想知道在MSTest中是否有一种简单的方法可以做到这一点?到目前为止,我能想到的最好的是:

  • 将实际测试代码外部化为私有方法
  • 保存当前文化
  • 设置文化并调用私有方法(对每种文化重复)
  • 最后,回归原始文化

充其量,它可以被描述为丑陋......而且详细。

1 个答案:

答案 0 :(得分:1)

最简单的方法可能是使用匿名委托,但请记住,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"));
    }
}