C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[1]: NMock2でByRefの戻り値を作ることができるのか?


(過去ログ 48 を表示中)

[トピック内 2 記事 (1 - 2 表示)]  << 0 >>

■25455 / inTopicNo.1)  NMock2でByRefの戻り値を作ることができるのか?
  
□投稿者/ koty (1回)-(2008/09/19(Fri) 15:43:50)

分類:[.NET 全般] 

お世話になります。

NMock2でメソッドの戻り値を作ることはできますが、
ByRefの戻り値をmockで作ることができるものなのでしょうか?
試行錯誤してみましたが方法が分かりません。
どなたか分かる方がいらっしゃいましたら教えてください。

既存のコードに対してテストコードを書いているので、
プロダクションコードの方を修正したくないのです。

'●プロダクションコード(テストされるクラス)
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", Zeiritsu).Will(NMock2.Return.Value(True))

        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

引用返信 編集キー/
■26112 / inTopicNo.2)  Re[1]: NMock2でByRefの戻り値を作ることができるのか?
□投稿者/ koty (2回)-(2008/10/02(Thu) 07:27:30)
解決しましたので、自己レスいたします。

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


解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -