MSTestで、ExpectedExceptionAttributeを使用したところ、挙動が自分の想定と違っていたので、調べてみました。
検証環境
- Visual Studio Community 2015 Update 3
- .NET Framework 4.5.1
ソースコード
例外メッセージの相違によりテストが失敗することを期待して、以下のようなユニットテストを実行します。
using System; using Microsoft.VisualStudio.TestTools.UnitTesting; namespace Test { [TestClass] public class UnitTest1 { [TestMethod] [ExpectedException(typeof(DivideByZeroException), "間違ったメッセージ")] public void ゼロ除算() { int i = 1; i = i / 0; } } }
結果
ところが、予想に反して、このテストは成功します。
理由
調べたところ、以下の情報が見つかりました。
- 第2引数は、例外メッセージとの相違をテストするためのものではなく、テストが失敗した時に出力させるメッセージ。
- でもバグがあるので、このメッセージを指定しても何も出力されない。
ということみたいです。現状指定しても意味がないということですね。
解決方法
こちらには、ExpectedExceptionBaseAttributeを継承したクラスを作成する方法が書いてあります。