10. サンプル( ITaxDao 、 TaxDao ) Public Interface ITaxDao ''' ----------------------------------------------------------------------------- ''' <summary> ‘’‘ 消費税マスタから消費税率を取得する ''' </summary> ''' <returns> 消費税率 </returns> ''' ----------------------------------------------------------------------------- Function Fill() As Decimal End Interface Public Class TaxDao Implements ITaxDao, IDisposable Public Function Fill() As Decimal Implements ITaxDao.Fill ‘ 未だ実装できてないのでとりあえず Zero を返すようにしておく。 Return Decimal.Zero End Function Public Sub Dispose() Implements System.IDisposable.Dispose End Sub End Class
11. サンプル( TaxCaluculator ) Public Class TaxCaluculator Implements IDisposable ''' ----------------------------------------------------------------------------- ''' <summary> ‘’‘ 税込み価格を計算します ''' </summary> ''' ----------------------------------------------------------------------------- Public Function Caluculate(price As Decimal) As Decimal Dim dao As ITaxDao = Me. CreateITaxDao Dim tax As Decimal = dao.Fill() Return price * tax End Function ''' ----------------------------------------------------------------------------- ''' <summary> ‘’‘ ITaxDao を生成する ''' 特化オブジェクトの為、オーバーライド可能なよう定義する ''' </summary> ''' ----------------------------------------------------------------------------- Public Overridable Function CreateITaxDao() As ITaxDao Return New TaxDao End Function Public Sub Dispose() Implements System.IDisposable.Dispose End Sub End Class
12. サンプル( SubTaxCaluculator ) Public Class SubTaxCaluculator Inherits TaxCaluculator ''' ----------------------------------------------------------------------------- ''' <summary> ''' ITaxDao の擬似オブジェクト ''' </summary> ''' ----------------------------------------------------------------------------- Private _dao As ITaxDao ''' ----------------------------------------------------------------------------- ''' <summary> ''' 擬似オブジェクトを受け取る ''' </summary> ''' ----------------------------------------------------------------------------- Sub New ( ByVal dao As ITaxDao) _dao = dao End Sub ''' ----------------------------------------------------------------------------- ''' <summary> ''' ファクトリーメソッドをオーバーライド ''' </summary> ''' ----------------------------------------------------------------------------- Public Overrides Function CreateITaxDao() As ITaxDao Return _dao End Function End Class
13. サンプル( TestTaxCaluculator ) Imports NMock Imports MbUnit.Framework <TestFixture()> _ Public Class TestTaxCaluculator ''' ---------------------------------------------------------------- ‘’‘ <summary> モックオブジェクト </summary> ''' ---------------------------------------------------------------- Private _mock As IMock ''' ---------------------------------------------------------------- ''' <summary> ターゲットオブジェクト </summary> ''' ---------------------------------------------------------------- Private _biz As TaxCaluculator ''' ---------------------------------------------------------------- ''' <summary> ''' ターゲットオブジェクトの生成 ''' </summary> ''' ---------------------------------------------------------------- <SetUp()> _ Public Sub Setup() ' 擬似オブジェクトの生成 _mock = New DynamicMock( GetType (ITaxDao)) _mock.SetupResult(“Fill", New Decimal (1.05)) Dim dao As ITaxDao = _ CType (_mock.MockInstance, ITaxDao) ' 特化オブジェクトを生成し、ターゲットオブジェクトにキャスト _biz = New SubTaxCaluculator(dao) End Sub ''' ----------------------------------------------------------------------------- ''' <summary> ‘’‘ 定価が100円の時のテストケース ''' </summary> ''' ----------------------------------------------------------------------------- <Test()> _ Public Sub 定価が100円の時のテスト () Assert.AreEqual( New Decimal (105), _biz.Caluculate(100)) End Sub ''' ----------------------------------------------------------------------------- ''' <summary> ‘’‘ 定価が0円の時のテストケース ''' </summary> ''' ----------------------------------------------------------------------------- <Test()> _ Public Sub 定価が0円の時のテスト () Assert.AreEqual( Decimal .Zero, _biz.Caluculate(0)) End Sub <TearDown()> _ Public Sub TearDown() _mock = Nothing If Not _biz Is Nothing Then _biz.Dispose() _biz = Nothing End Sub End Class