1

MbUnitには、MultipleCultureAttributeという優れた属性があります。

MSTestでこれを行う簡単な方法があるかどうか疑問に思っていますか?これまでのところ、私が思いつくことができる最高のものは次のとおりです。

  • 実際のテストコードをプライベートメソッドに外部化する
  • 現在の文化を保存する
  • カルチャの設定とプライベートメソッドの呼び出し(カルチャごとに繰り返されます)
  • そして最後に、元の文化に戻ります

せいぜい、それは醜い...そして冗長であると説明することができます。

4

1 に答える 1

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"));
    }
}
于 2009-08-13T10:19:11.177 に答える