MSTestでフォームの単体テスト自動化環境を構築(VB.NET)

ITプログラミング
この記事は約4分で読めます。
スポンサーリンク

VB.Net(4.7)のWindowsフォームで製造されたアプリケーションの単体テストを
自動化することとなり、色々と調べたので備忘録として残しておこうと思います。

これから新規で作成していく場合ではなく、すでに製造されて本番リリースされている
プログラムの単体テストを自動化していく作業だったので結構大変でした。

条件として
・製造しているアプリケーションの言語はVB.NET(4.7)
・極力現状の本番で動いているプログラムは修正しない。
VisualStudio2017 Proffesionalを利用

単体テストプロジェクトの作成

新規プロジェクトであれば本番プログラムと同じプロジェクトにテストコードを書くことが
できますが、今回はすでに本番リリースされたプログラムがあるのでそんなことはできません。

よって、単体テスト用のプロジェクトを作成します。

  • ファイル→新規作成→プロジェクトを選択

  • VisualBasic→テスト→単体テストプロジェクト(.NetFramework)を選択し、プロジェクト名、場所、ソリューション名を決定する。

※フレームワークは、本番と同じバージョンに合わせる。
※ソリューションフォルダを作成にチェックを入れる。

  • OKボタンを押すと自動でひな形が作成されます。

  • プロジェクト⇒参照で本番PGのDLLファイルを参照させます。

※複数のdllを参照する場合はSHIFTを押しながら選択すればOK

単体テストの実行

単体テストの実行と結果確認は、テストエクスプローラーで確認できます。

単体テストでOKかNGかの判断はASSERTメソッドで行う

単体テストの結果がOKかNGかの判断は基本的にASSERTメソッドで行います。

よく使用するAssertメソッド

  • Assert.AreEqual(expected, actual) Expected: 期待値 Actual:実際の値が同じであればOK
  • Assert.IsFalse(expected) 期待値ではないことを判定
  • Assert.IsTrue(expected) 期待値であることを判定

以下は変数に”1″をセットして結果が1であることを確認するテストコードです。想定値と結果が正しい場合はランプが緑になります。

以下は変数に1をセットしていますが結果には、”2”が返ってくるようにしているので
想定値と結果が異なっていると判断してランプが赤くなります。

エラーの原因を確認する方法

ランプが赤くなった場合は、想定値と結果が異なっていることを示すので、エラー原因を確認する必要があります。確認方法は、テストエクスプローラーの下に表示されます。

今回の場合は、想定値は”1″でしたが結果は”2”が返ってきているので以下のメッセージが表示されています。

Message:Assert.AreEqualに失敗しました。<1>が必要ですが、<2>が指定されています。

テストエクスプローラーの階層構成はClassで分ける

テストメソッドが少ないうちは、気になりませんが増えてくると階層構成にしたいことがあります。階層に分けたい場合は他にもやり方があるかもしれませんが,今回はクラスで階層構成にしました。ボタンやフォームの処理ごとにクラスを分けた方が断然見やすくなります
単体テストは、テストをすることも重要ですが、コードで書かれた仕様書の意味もあるので
処理ごとに階層を分けることはすごく重要だと思います。

Classを分けない場合は、テストメソッドが並列に表示される。

クラスを分けずにテストコードを書くと全ボタンや機能がすべて並列になっていますので
テストケースが多くなればなるほどわかりにくくなります。

ボタンの機能ごとにクラスを分けるとボタンごとに階層が分かれる

以下の例だとボタンごとに階層表示されるのでテストケースが増えれば増えるほど見やすいです。

※本当は、さらにもう一つ階層構成を作りたいのですが、テストエクスプローラーの仕様上
階層は、一つ下までしか作れませんでした。

まとめ

MSTest自動化の構築と書く時の心得をまとめると

  • 単体テストのプロジェクトの作成は、VisualStudioから作成する。
  • テストしたいPGのDLLを参照設定する。
  • 単体テストの合否はAssertメソッドを使用して行う。
  • 必ず正常終了するテストコードと異常終了するコードを書いて単体テストの環境が正しく動作していることを確認する。
  • 階層表示させたほうが、後から見やすいのでボタンや機能ごとになどでクラスを分ける。

まだ肝心の実際の本番コードを呼び出すところまでは言っていませんが、上記内容で環境構築とどのようにテストを書けばよいかは大体わかるかなと思います。

コメント

タイトルとURLをコピーしました