Visual Studioのテストツール辺りの備忘録
自分の備忘録を含めて軽くメモ。知ってる人も多いと思いますが、簡単に書いてみます。知っていると結構便利です。
タイムアウト処理と例外発生処理のテストを行う場合、ExpectedException属性やTimeout属性を使用したテストが出来ます。判定用のクラスはAssert機能以外にも、StringAssertクラスやCollectionAssertクラスが存在します。
上記の属性、クラスを知っているだけでも単体テスト効率が上がるので、一応ちょこっと書いてみます。
例外処理用の属性
例外が発生するロジックのテストも容易です。いちいち「try〜catch」を書く必要は有りません(こっちは地味ですが相当便利だと思います)。
/// <summary> /// ExpectedExceptionの引数と同じ例外じゃないとダメ ⇒ このテストは失敗する ///</summary> [TestMethod()] [ExpectedException(typeof(Exception))] public void ExpectedExceptionTest01() { throw new ArgumentOutOfRangeException("自前で投げてみた"); //以下の処理を書かなくて良い! //try //{ // //ホゲホゲ処理 //} //catch (ArgumentOutOfRangeException ex) //{ //} } /// <summary> /// ExpectedExceptionの引数と同じ例外じゃないとダメ ⇒ このテストは成功する ///</summary> [TestMethod()] [ExpectedException(typeof(ArgumentOutOfRangeException))] public void ExpectedExceptionTest02() { throw new ArgumentOutOfRangeException("自前で投げてみた"); }
タイムアウト処理用の属性
属性を使ってタイムアウト時間を判定したテストを実施できます。重い処理に対する性能をテストしたい場合にお勧め。
/// <summary> /// 2秒以内に終わらないとダメ ⇒ このテストは失敗する ///</summary> [TestMethod()] [Timeout(2)] public void TimeoutAttributeTest01() { //System.Diagnostics.Stopwatchを使って同様の処理を書けないことは無いですが、 //こっちの方がスマート Thread.Sleep(TimeSpan.FromSeconds(3.1)); } /// <summary> /// 2秒以内に終わらないとダメ ⇒ このテストは成功する ///</summary> [TestMethod()] [Timeout(2)] public void TimeoutAttributeTest02() { //当然こっちのテストは成功する }
文字列やコレクションのAssert処理
StringAssertやCollectionAssertというクラスを用いると、文字列やコレクションの判定が非常に容易です。ちょっと調べるのが力尽きましたが、メソッド一発で良い感じに判定してくれるメソッドが多いです。
[TestMethod()] public void AssertTest01() { //文字列処理用のAssertクラス StringAssert.Contains("巨乳", "乳"); StringAssert.StartsWith("私は決して変態ではない", "私は"); StringAssert.EndsWith("shibayanは変態", "変態"); StringAssert.Matches("ちっちちっち、おっぱーい。ぼいんぼいーん", new System.Text.RegularExpressions.Regex("おっぱ")); StringAssert.DoesNotMatch("ちっちちっち、おっぱーい。ぼいんぼいーん", new System.Text.RegularExpressions.Regex("おしりおしり")); //調べるのが力尽きた…orz //CollectionAssert.AllItemsAreNotNull //CollectionAssert.AllItemsAreInstancesOfType //CollectionAssert.IsSubsetOf }