|
解決しましたので、自己レスいたします。
Willの引数に
New Actions.SetNamedParameterActionというインスタンスを渡して、
ByRefの戻り値を指定してやればいいと判明しました。
Expect.Once().On(Me.m_KanrijohoB).Method("GetZeiRit").With("1", 0).Will(NMock2.Return.Value(True), _
New Actions.SetNamedParameterAction("Zeiritsu", 0.05d))
これで開発に使えそうです。
テストコードってみなさんどれくらい書いているもんなんでしょうか?
'●プロダクションコード(テストされるクラス)
Public Class ZeikinKeisanBClass
Private m_KanrijohoB As IKanriJohoAccessBClass
Private m_Zeirit As Decimal = 0
Public Sub New(ByVal KanriJohoB As IKanriJohoAccessBClass)
Me.m_KanrijohoB = KanriJohoB
Me.m_KanrijohoB.GetZeiRit("1", Me.m_Zeirit) '参照渡しをすることで税率を取得
End Sub
Public Function ZeigkKeisan(ByVal Input As Decimal) As Decimal
Return Input + Input * Me.m_Zeirit
End Function
End Class
'●mockにすりかえるクラス
Public Interface IKanriJohoAccessBClass
Function GetZeiRit(ByVal ZeiShubetsu As String, ByRef Zeiritsu As Decimal) As Boolean
End Interface
Public Class KanriJohoAccessBClass
Implements IKanriJohoAccessBClass
Public Function GetZeiRit(ByVal ZeiShubetsu As String, ByRef Zeiritsu As Decimal) As Boolean Implements IKanriJohoAccessBClass.GetZeiRit
'ホンモノの処理。データベースから該当の税種別の税率を取得する
End Function
End Class
'●テストコード
<TestFixture()> _
Public Class ZeikinKeisanBClass_Test
Private m_ZeikinKeisanB As ZeikinKeisanBClass
Private m_KanrijohoB As IKanriJohoAccessBClass
<SetUp()> _
Public Sub Init()
End Sub
<Test()> _
Public Sub 金額計算テスト1()
Dim mock As New Mockery()
Dim Zeiritsu As Decimal = 0
Me.m_KanrijohoB = CType(mock.NewMock(GetType(IKanriJohoAccessBClass)), IKanriJohoAccessBClass)
'ここをうまいこと書いて税率をテストコードから制御したい
Expect.Once().On(Me.m_KanrijohoB).Method("GetZeiRit").With("1", 0).Will(NMock2.Return.Value(True), _
New Actions.SetNamedParameterAction("Zeiritsu", 0.05d))
Me.m_ZeikinKeisanB = New ZeikinKeisanBClass(Me.m_KanrijohoB)
Dim IncludeTax As Decimal
'税率5%で、計算が正しいこと
Assert.That(Me.m_ZeikinKeisanB.ZeigkKeisan(100), Iz.EqualTo(105), "税金計算")
End Sub
End Class
|