Mock 概要 2007-03-28 tutinoko16
Agenda <ul><li>Overview </li></ul><ul><li>概要 </li></ul><ul><li>Mock モデル </li></ul><ul><li>サンプル </li></ul><ul><li>Mock 導入の注...
Overview <ul><li>本資料では Mock についてその概略を説明します。 </li></ul><ul><li>目的は以下の通り。 </li></ul><ul><li>作者本人の知識体系化 </li></ul><ul><li>Moc...
概要 <ul><li>Mock とは </li></ul><ul><li> ->世間一般的に模造品のこと </li></ul><ul><li>Mock オブジェクトとは </li></ul><ul><li> ->インターフェース定義から生成され...
Mockモデル テスト ターゲット コラボレータ 特化 擬似 Mock Framework <<生成する>> <<委譲する>> <<生成する>> <<生成する(擬似オブジェクト)>> <<擬似オブジェクト生成を委譲>> <<テストする>> コラ...
Mockモデル(オブジェクト図)
Mockモデル(シーケンス図)
サンプル(概要) テストの前提 アーキテクチャ BCE モデルにて実現。 機能概要 定価金額を入力すると、DB上に保持している消費税率を乗算し、税込み価格を表示する テスト対象 MbUnit ユニットテスティングフレームワーク NMock モッ...
サンプル(クラス構成) クラス構成 TestTaxCaluculator TaxCaluculator TaxDao SubTaxCaluculator ITaxDao TaxUI このクラスをテスト 税込み価格を表示する TaxUI プレゼン...
サンプル( ITaxDao 、 TaxDao ) Public Interface  ITaxDao ''' -------------------------------------------------------------------...
サンプル( TaxCaluculator ) Public Class  TaxCaluculator Implements  IDisposable ''' ------------------------------------------...
サンプル( SubTaxCaluculator ) Public Class  SubTaxCaluculator Inherits  TaxCaluculator ''' -----------------------------------...
サンプル( TestTaxCaluculator ) Imports  NMock Imports  MbUnit.Framework <TestFixture()> _ Public Class  TestTaxCaluculator '''...
サンプル(テスト結果)
Mock導入時の注意点 <ul><li>インターフェースドリブン </li></ul><ul><li>  ->クラスの実装は必ずインターフェースに対して行う </li></ul><ul><li>  ->クラス間の会話はインターフェースで行うよう...
各種ツール .NET Easy Mock .NET http://www.ayende.com/projects/rhino-mocks.aspx .NET Rhino.Mocks http://sourceforge.net/projects...
まとめ <ul><li>Mock オブジェクトとはインターフェースから生成される擬似オブジェクト </li></ul><ul><li>Mock を使用する事により、アーキテクチャレイヤーの実装分離と並行開発が可能 </li></ul><ul><...
Upcoming SlideShare
Loading in...5
×

mock overview

1,637

Published on

Mockについて勉強した事を整理してみました

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,637
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Transcript of "mock overview"

  1. 1. Mock 概要 2007-03-28 tutinoko16
  2. 2. Agenda <ul><li>Overview </li></ul><ul><li>概要 </li></ul><ul><li>Mock モデル </li></ul><ul><li>サンプル </li></ul><ul><li>Mock 導入の注意点 </li></ul><ul><li>各種ツール </li></ul><ul><li>まとめ </li></ul>
  3. 3. Overview <ul><li>本資料では Mock についてその概略を説明します。 </li></ul><ul><li>目的は以下の通り。 </li></ul><ul><li>作者本人の知識体系化 </li></ul><ul><li>Mock について初歩的な理解 </li></ul><ul><li>ユニットテストへの活用と開発効率向上 </li></ul>
  4. 4. 概要 <ul><li>Mock とは </li></ul><ul><li> ->世間一般的に模造品のこと </li></ul><ul><li>Mock オブジェクトとは </li></ul><ul><li> ->インターフェース定義から生成される擬似インスタンス </li></ul><ul><li> ->振る舞いは外部より設定可能 </li></ul><ul><li> ->アーキテクチャレイヤーの実装分離と並行開発が可能 </li></ul>
  5. 5. Mockモデル テスト ターゲット コラボレータ 特化 擬似 Mock Framework <<生成する>> <<委譲する>> <<生成する>> <<生成する(擬似オブジェクト)>> <<擬似オブジェクト生成を委譲>> <<テストする>> コラボレータ インターフェース <<実装する>> <<継承>> コラボレーターの代わりに擬似を返すようファクトリーメソッドをオーバーライドするターゲットのサブクラス 特化オブジェクト 擬似オブジェクトのパターンに従うコラボレーターのサブクラス 擬似オブジェクト ターゲットによって生成または取得されるオブジェクト コラボレーターオブジェクト テスト対象オブジェクト ターゲットオブジェクト 説明 主要な概念
  6. 6. Mockモデル(オブジェクト図)
  7. 7. Mockモデル(シーケンス図)
  8. 8. サンプル(概要) テストの前提 アーキテクチャ BCE モデルにて実現。 機能概要 定価金額を入力すると、DB上に保持している消費税率を乗算し、税込み価格を表示する テスト対象 MbUnit ユニットテスティングフレームワーク NMock モックオブジェクト VB.NET 実装言語 内容 カテゴリ 消費税率を取得する Entity 税込み価格を算出する。 消費税率の取得は Entity に委譲する。 Control 税込み価格を表示する Boudary 概要 アーキテクチャ層
  9. 9. サンプル(クラス構成) クラス構成 TestTaxCaluculator TaxCaluculator TaxDao SubTaxCaluculator ITaxDao TaxUI このクラスをテスト 税込み価格を表示する TaxUI プレゼンテーション SubTaxCaluculator ITaxDao TaxDao TaxCaluculator TestTaxCaluculator クラス 消費税率を取得する DAO インターフェース コラボレーターインターフェース TaxCaluculator のテストクラス テスト TaxCaluculator のサブクラス。ファクトリーメソッドをオーバーライドし擬似オブジェクトを返却。 特化 消費税率を取得する DAO コラボレーター 税込み価格計算処理を保持するクラス ターゲット 概要 概念
  10. 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. 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. 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. 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&quot;, 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
  14. 14. サンプル(テスト結果)
  15. 15. Mock導入時の注意点 <ul><li>インターフェースドリブン </li></ul><ul><li>  ->クラスの実装は必ずインターフェースに対して行う </li></ul><ul><li>  ->クラス間の会話はインターフェースで行うよう実装する </li></ul><ul><li>  ->インターフェースで公開すべきメソッドはクラス設計で </li></ul><ul><li>   抽出されるはず </li></ul><ul><li>ファクトリーメソッド </li></ul><ul><li>  ->オーバーライド可能なファクトリーメソッドを実装する </li></ul><ul><li>  ->アーキテクチャレイヤーをまたがるインスタンスの生成は、 </li></ul><ul><li>   必ずファクトリーメソッドを利用するようにする </li></ul>Mock の使用を前提としたクラス設計が必要
  16. 16. 各種ツール .NET Easy Mock .NET http://www.ayende.com/projects/rhino-mocks.aspx .NET Rhino.Mocks http://sourceforge.net/projects/dotnetmock .NET .NET Mock http://en.www.prettyobjects.com/POCMock.aspx .NET POCMock http://www.typemock.com/ .NET Type Mock .NET http://nmock.sourceforge.net/ .NET NMock Java Virtual Mock Object (djUnit) Java Easy Mock .NET MockDataProvider URL 言語 ツール
  17. 17. まとめ <ul><li>Mock オブジェクトとはインターフェースから生成される擬似オブジェクト </li></ul><ul><li>Mock を使用する事により、アーキテクチャレイヤーの実装分離と並行開発が可能 </li></ul><ul><li>Mock を使うにはそれを前提としたクラス設計が必要 </li></ul>

×