2009-08-12 2 views
1

MbUnitの属性はMultipleCultureAttributeです。MSTestでMbUnitの[MultipleCulture]属性をエミュレートするにはどうすればよいですか?

MSTestをでこれを行う簡単な方法がある場合、私は疑問に思って?これまでのところ、私が思い付くことができる最高は次のとおりです。プライベートメソッド

  • 文化を設定し、現在の文化
  • の保存とプライベートメソッドを呼び出すには、実際のテストコードをExternalizating

    • (各培養のために繰り返さ)
    • そして最後に、最高の状態で元の培養に

    を元に戻す、それは醜い...と冗長として記述することができます。

  • 答えて

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

    これは間違いなく正しい答えです。私はそれに印を付けました。 しかし、私のプロフィールからわかるように、私は新しいユーザーであり、質問の重要な情報を忘れてしまった。私の会社はVB.NETのショップで、VS2010までステートメントlamdasを取得しません。 これは私が実際のテストコードをプライベートメソッドに入れ、関数ポインタをDo()メソッドに渡す必要があるように思われるため、私が暗に指摘したものです。これは、私の意見では、テスト切断を作成します。 MSTestフレームワークを拡張するための主要な作業が不足していますか? –

    +0

    残念ながら、MSTestにはこのような装飾のための拡張性のストーリーはありません。したがって、フレームワークや言語を変更しない限り、実装の選択肢は厳しく制限されます。 –

    関連する問題