VisualBasic(MSTestの簡単なサンプル)
■MSTestを使ってみる。
プロジェクトのテンプレートを見ていたときに、Testが目に入ったので、テストプロジェクトを試してみる。単体テスト(Unit test)とのことなので、入力と出力を決めて、サンプルプログラムが正しい動作をしているか確認する。
新しくプロジェクトを作成すると、デフォルトで下のようなコードが入っている。UnitTestingが単体テストを行うためのライブラリ?になると思う。
先にサンプルプログラムを用意しなければならないので、数字を入れて、それに応じたメッセージを出力するクラス(Program)を作った。ここでは、Hell0など、あえて間違ったメッセージを入れている。
Imports System
Class Program
Function Main(args As String())
Dim index As Integer = 0
Dim message As String = ""
index = Integer.Parse(args(0))
If index = 0 Then
message = "Hell0"
ElseIf index = 1 Then
message = "Good moring"
ElseIf index = 2 Then
message = "Good evening"
ElseIf index = 3 Then
message = "Good bye"
End If
Return message
End Function
End Class
次にテスト用のクラス。この中で、ProgramクラスのMain関数に数値を入れ、その出力を期待される結果と比較する。Assert.AreEqual (String, String)で文字列同士の比較ができるよう。始めに固定値として入力と期待される出力を変数に入れ、そこを参照する形でコードを組んでいる。
Imports Microsoft.VisualStudio.TestTools.UnitTesting
Namespace MSTestProject1
<TestClass>
Public Class UnitTest1
Dim RESULT_TEST01 As String() = New String() {"0", "Hello"}
Dim RESULT_TEST02 As String() = New String() {"1", "Good morning"}
Dim RESULT_TEST03 As String() = New String() {"2", "Good evening"}
Dim RESULT_TEST04 As String() = New String() {"3", "Good bye"}
Dim prog1 As Program = New Program()
<TestMethod>
Sub TestSub1()
Dim args As String() = New String() {RESULT_TEST01(0)}
Assert.AreEqual(prog1.Main(args), RESULT_TEST01(1))
End Sub
<TestMethod>
Sub TestSub2()
Dim args As String() = New String() {RESULT_TEST02(0)}
Assert.AreEqual(prog1.Main(args), RESULT_TEST02(1))
End Sub
<TestMethod>
Sub TestSub3()
Dim args As String() = New String() {RESULT_TEST03(0)}
Assert.AreEqual(prog1.Main(args), RESULT_TEST03(1))
End Sub
<TestMethod>
Sub TestSub4()
Dim args As String() = New String() {RESULT_TEST04(0)}
Assert.AreEqual(prog1.Main(args), RESULT_TEST04(1))
End Sub
End Class
End Namespace
実行は、デバッグからではなく、テストから「すべてのテストを実行」で行う。
結果が下。プログラムのメッセージを間違えていた部分は、期待される結果と異なるので、×になる。ただ、エラーメッセージを見ると、左が期待されるもの、右が実際のものと入れるみたい。
エラーが出たメッセージ部分を修正・保存して、テストを再度実行する。今度はすべて一致した。
今回は簡単なサンプルなので便利な感じはしないけど、複雑なロジックのコードを修正するときに、他の所にバグを仕込んでいないかなど手早く確認できる。