2016-04-25 11 views
0

私はC#ユニットテスト(VSテストツールを使用)を作成しました。とりわけ、そのような例外をチェックするテストがあります:私は私のユニットテストファイルを開き、コンテキストメニューの「ファイル名を指定して実行テスト」をクリックするとVisual Studioテストエクスプローラで外国語のテストを実行します

Assert.AreEqual("Object reference not set to an instance of an object.", e.Message); 

は、すべてが正常に動作します。 Visual Studioのテストエクスプローラを使用して「Run tests」をクリックすると、例外のメッセージが異なるという例外が表示されます。実際には、それは私がチェックしているものと同じですが、別の言語で同じです。両方の場合に実行されるテストは同じであり、言語の変更やその他の単純なロジックテストはありません。私のOSは英語版、Visual Studioでもあります。私は別のソリューションで同様のテストを行い、すべて正常に動作します。このソリューションと、私が単体テストを書いているプロジェクトの1つは、この外国語のシステムを持つ同僚によって作成されたものです。しかし、私はどこでもそのような設定を見つけることができません。誰かがこれらがどこにあるか考えていますか?テストを英語で常に実行するにはどうすればよいですか?

答えて

0

それを必要とする他のケースの誰かに、テストのために私の解決策です。テストは、言語に依存しているとき、それは本当に良いではないので、私は今、例外タイプをチェック:

Assert.IsInstanceOfType(e, typeof(ArgumentNullException)); 

しかし、私はまだ言語がから撮影された場所を知っていただきたいと思います。私は英語ですべてを持っているとき、本当にそれが英語であることを期待しています。

1

代わりにHResultを使用してみてください。

Assert.AreEqual(val, e.HResult) 

言語に応じて変更しないでください。 HResultは、特定の例外に割り当てられたコード化された数値です。したがって、HResultを使用すると、スローされている例外がわかります。

編集:

それとも、あなたが期待しているかの例外を知っていれば、あなたがあなた自身のException-「expecter」を書くことができます。その後、

protected static void ThrowsException<T>(Action action) where T : Exception 
    { 
     var thrown = false; 
     try 
     { 
      action(); 
     } 
     catch (T) 
     { 
      thrown = true; 
     } 

     Assert.IsTrue(thrown); 
    } 

そして、このようにそれを使用します。ここでは

ThrowsException<IndexOutOfRangeException>(() => MyController.MyAction()); 
+0

を使用するよりも、きれいだ、私は単にテストの言語を制御する方法を知りたいと思ったし、それはどのように外国語を持つことが可能です私のシステム全体が英語であるとき。しかし、あなたが正しいです、私は何かを使用する必要がありますテスト言語中立、良い点。 – Antiohia

+0

言語に依存しないようにするには、奇妙な整数を使用できますが、列挙型にバインドしてください。次に、テキストの中でどのような例外が発生しているかを確認します。 –

0

例外を特定して例外を使用するのはなぜですか?文字列メッセージをチェックするのは本当に悪いことです。私の意見では、私が実際にいくつかの奇妙な整数を使用したくないIsInstanceOfType

var testDelegate =() => MyService.Method(params); 
Assert.Throws<NullException>(testDelegate); 
関連する問題