[VB.NET] ユニットテストにおけるモック作成を楽にするmoqの使い方まとめ
moqの使い方はばっちり書いてあるも、使われている言語はC#。当然ですよね。
今回の現場ではほんとぉおおおおーーーに仕方なく不慣れなVB.NETを使わなければいけないので、VB.NETにおける書き方をまとめます。
とりあえず、今まで使ったところです。随時追加していきます。
モック化対象インターフェース
このインターフェースをモック化します。
IFoo.vb
Public Interface IFoo
Function DoSomething(value As String) As Boolean
Function DoSomethingStringy(value As String) As String
Function TryParse(src As String, ByRef dst As String) As Boolean
Function Submit(bar As Bar) As Boolean
Function GetCount() As Integer
Function GetCountThing() As Integer
Property Name As String
End Interface
Bar.vb
Public Class Bar
End Class
モックの作成
Dim mock As new Mock(Of IFoo)()
メソッド呼び出し時の戻り値
ByRefで返す値と戻り値を設定
Dim outString = "ack"
mock.Setup(Function(foo) foo.TryParse("ping", outString).Returns(True)
メソッド呼び出し時に期待する引数
任意の値でもOk
mock.Setup(Function(foo) foo.DoSomething(It.IsAny(Of String)).Returns(True)
正規表現にマッチすることを期待
mock.Setup(Function(foo) foo.DoSomethingStringy(It.IsRegex("[a-d]+", RegexOptions.IgnoreCase)).Returns("foo")
プロパティへのアクセス
mock.Setup(Function(foo) foo.Name).Returns("bar")
メソッドが呼ばれたか
テスト対象を実行した後に書きます。
mock.Verify(Sub(foo) foo.DoSomething("expect"))
呼ばれていないことを期待
mock.Verify(Sub(foo) foo.DoSomething("expect"), Times.Never)
1度だけ呼ばれる
mock.Verify(Sub(foo) foo.DoSomething("expect"), Times.Once)