moqの使い方はばっちり書いてあるも、使われている言語はC#。当然ですよね。 :kissing_heart:

今回の現場ではほんとぉおおおおーーーに仕方なく:cold_sweat:不慣れなVB.NETを使わなければいけないので、VB.NETにおける書き方をまとめます。

とりあえず、今まで使ったところです。随時追加していきます。 :smile:

モック化対象インターフェース

このインターフェースをモック化します。

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)