SlideShare une entreprise Scribd logo
1  sur  17
Mock 概要 2007-03-28 tutinoko16
Agenda ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Overview ,[object Object],[object Object],[object Object],[object Object],[object Object]
概要 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Mockモデル テスト ターゲット コラボレータ 特化 擬似 Mock Framework <<生成する>> <<委譲する>> <<生成する>> <<生成する(擬似オブジェクト)>> <<擬似オブジェクト生成を委譲>> <<テストする>> コラボレータ インターフェース <<実装する>> <<継承>> コラボレーターの代わりに擬似を返すようファクトリーメソッドをオーバーライドするターゲットのサブクラス 特化オブジェクト 擬似オブジェクトのパターンに従うコラボレーターのサブクラス 擬似オブジェクト ターゲットによって生成または取得されるオブジェクト コラボレーターオブジェクト テスト対象オブジェクト ターゲットオブジェクト 説明 主要な概念
Mockモデル(オブジェクト図)
Mockモデル(シーケンス図)
サンプル(概要) テストの前提 アーキテクチャ BCE モデルにて実現。 機能概要 定価金額を入力すると、DB上に保持している消費税率を乗算し、税込み価格を表示する テスト対象 MbUnit ユニットテスティングフレームワーク NMock モックオブジェクト VB.NET 実装言語 内容 カテゴリ 消費税率を取得する Entity 税込み価格を算出する。 消費税率の取得は Entity に委譲する。 Control 税込み価格を表示する Boudary 概要 アーキテクチャ層
サンプル(クラス構成) クラス構成 TestTaxCaluculator TaxCaluculator TaxDao SubTaxCaluculator ITaxDao TaxUI このクラスをテスト 税込み価格を表示する TaxUI プレゼンテーション SubTaxCaluculator ITaxDao TaxDao TaxCaluculator TestTaxCaluculator クラス 消費税率を取得する DAO インターフェース コラボレーターインターフェース TaxCaluculator のテストクラス テスト TaxCaluculator のサブクラス。ファクトリーメソッドをオーバーライドし擬似オブジェクトを返却。 特化 消費税率を取得する DAO コラボレーター 税込み価格計算処理を保持するクラス ターゲット 概要 概念
サンプル( 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
サンプル( 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
サンプル( 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
サンプル( 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
サンプル(テスト結果)
Mock導入時の注意点 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Mock の使用を前提としたクラス設計が必要
各種ツール .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 言語 ツール
まとめ ,[object Object],[object Object],[object Object]

Contenu connexe

Similaire à mock overview

JobSchedulerを使ったDevOps at OSC Tokyo/Fall 2013
JobSchedulerを使ったDevOps at OSC Tokyo/Fall 2013JobSchedulerを使ったDevOps at OSC Tokyo/Fall 2013
JobSchedulerを使ったDevOps at OSC Tokyo/Fall 2013
OSSラボ株式会社
 
Struts2を始めよう!
Struts2を始めよう!Struts2を始めよう!
Struts2を始めよう!
Shinpei Ohtani
 
[A33] [特濃jpoug statspack on pdb oracle database 12c] 20131115 補足・続報付き
[A33] [特濃jpoug statspack on pdb oracle database 12c] 20131115 補足・続報付き[A33] [特濃jpoug statspack on pdb oracle database 12c] 20131115 補足・続報付き
[A33] [特濃jpoug statspack on pdb oracle database 12c] 20131115 補足・続報付き
Insight Technology, Inc.
 
アプリコンテスト
アプリコンテストアプリコンテスト
アプリコンテスト
Tomonori Yamada
 
2014年4月17日 dstnHub発表スライド ライトニングトークス「開発部QAグループ 製品パッチ」
2014年4月17日 dstnHub発表スライド ライトニングトークス「開発部QAグループ 製品パッチ」 2014年4月17日 dstnHub発表スライド ライトニングトークス「開発部QAグループ 製品パッチ」
2014年4月17日 dstnHub発表スライド ライトニングトークス「開発部QAグループ 製品パッチ」
dstn
 
Mastering CGI::Application
Mastering CGI::ApplicationMastering CGI::Application
Mastering CGI::Application
Hideo Kimura
 
20130927 adstir emr
20130927 adstir emr20130927 adstir emr
20130927 adstir emr
AdStir
 
ザ・ドキュメント~うまくいかないNoSQL~
ザ・ドキュメント~うまくいかないNoSQL~ザ・ドキュメント~うまくいかないNoSQL~
ザ・ドキュメント~うまくいかないNoSQL~
Akihiro Kuwano
 
第2回 R言語で始めよう、データサイエンス(ハンズオン勉強会) 〜相関分析による需要予測編〜
第2回 R言語で始めよう、データサイエンス(ハンズオン勉強会) 〜相関分析による需要予測編〜第2回 R言語で始めよう、データサイエンス(ハンズオン勉強会) 〜相関分析による需要予測編〜
第2回 R言語で始めよう、データサイエンス(ハンズオン勉強会) 〜相関分析による需要予測編〜
Yasuyuki Sugai
 
勉強会force#2 HTML5によるモバイルアプリ開発
勉強会force#2 HTML5によるモバイルアプリ開発勉強会force#2 HTML5によるモバイルアプリ開発
勉強会force#2 HTML5によるモバイルアプリ開発
Kazuki Nakajima
 

Similaire à mock overview (20)

JobSchedulerを使ったDevOps at OSC Tokyo/Fall 2013
JobSchedulerを使ったDevOps at OSC Tokyo/Fall 2013JobSchedulerを使ったDevOps at OSC Tokyo/Fall 2013
JobSchedulerを使ったDevOps at OSC Tokyo/Fall 2013
 
Struts2を始めよう!
Struts2を始めよう!Struts2を始めよう!
Struts2を始めよう!
 
[A33] [特濃jpoug statspack on pdb oracle database 12c] 20131115 補足・続報付き
[A33] [特濃jpoug statspack on pdb oracle database 12c] 20131115 補足・続報付き[A33] [特濃jpoug statspack on pdb oracle database 12c] 20131115 補足・続報付き
[A33] [特濃jpoug statspack on pdb oracle database 12c] 20131115 補足・続報付き
 
Ansibleではじめるサーバー・ネットワークの自動化(2018/07/05)
Ansibleではじめるサーバー・ネットワークの自動化(2018/07/05)Ansibleではじめるサーバー・ネットワークの自動化(2018/07/05)
Ansibleではじめるサーバー・ネットワークの自動化(2018/07/05)
 
Develop Web Application with Node.js + Express
Develop Web Application with Node.js + ExpressDevelop Web Application with Node.js + Express
Develop Web Application with Node.js + Express
 
アプリコンテスト
アプリコンテストアプリコンテスト
アプリコンテスト
 
Azure Policyでハイブリッドな構成管理
Azure Policyでハイブリッドな構成管理Azure Policyでハイブリッドな構成管理
Azure Policyでハイブリッドな構成管理
 
2014年4月17日 dstnHub発表スライド ライトニングトークス「開発部QAグループ 製品パッチ」
2014年4月17日 dstnHub発表スライド ライトニングトークス「開発部QAグループ 製品パッチ」 2014年4月17日 dstnHub発表スライド ライトニングトークス「開発部QAグループ 製品パッチ」
2014年4月17日 dstnHub発表スライド ライトニングトークス「開発部QAグループ 製品パッチ」
 
a-blog cmsの2015年版の基本テーマを 使ったカスタマイズのポイント
a-blog cmsの2015年版の基本テーマを 使ったカスタマイズのポイントa-blog cmsの2015年版の基本テーマを 使ったカスタマイズのポイント
a-blog cmsの2015年版の基本テーマを 使ったカスタマイズのポイント
 
AZAREA-Cluster (Hadoop Conference Japan 2013 Winter Demo Image)
AZAREA-Cluster (Hadoop Conference Japan 2013 Winter Demo Image) AZAREA-Cluster (Hadoop Conference Japan 2013 Winter Demo Image)
AZAREA-Cluster (Hadoop Conference Japan 2013 Winter Demo Image)
 
Mastering CGI::Application
Mastering CGI::ApplicationMastering CGI::Application
Mastering CGI::Application
 
Ansibleではじめるサーバー・ネットワークの自動化(2018/08/22)
Ansibleではじめるサーバー・ネットワークの自動化(2018/08/22)Ansibleではじめるサーバー・ネットワークの自動化(2018/08/22)
Ansibleではじめるサーバー・ネットワークの自動化(2018/08/22)
 
Citus 10 verification result (Japanese)
Citus 10 verification result (Japanese)Citus 10 verification result (Japanese)
Citus 10 verification result (Japanese)
 
20130927 adstir emr
20130927 adstir emr20130927 adstir emr
20130927 adstir emr
 
Taming robotframework
Taming robotframeworkTaming robotframework
Taming robotframework
 
ザ・ドキュメント~うまくいかないNoSQL~
ザ・ドキュメント~うまくいかないNoSQL~ザ・ドキュメント~うまくいかないNoSQL~
ザ・ドキュメント~うまくいかないNoSQL~
 
第2回 R言語で始めよう、データサイエンス(ハンズオン勉強会) 〜相関分析による需要予測編〜
第2回 R言語で始めよう、データサイエンス(ハンズオン勉強会) 〜相関分析による需要予測編〜第2回 R言語で始めよう、データサイエンス(ハンズオン勉強会) 〜相関分析による需要予測編〜
第2回 R言語で始めよう、データサイエンス(ハンズオン勉強会) 〜相関分析による需要予測編〜
 
Oracle In-database-archiving ~Oracleでの論理削除~
Oracle In-database-archiving ~Oracleでの論理削除~Oracle In-database-archiving ~Oracleでの論理削除~
Oracle In-database-archiving ~Oracleでの論理削除~
 
勉強会force#2 HTML5によるモバイルアプリ開発
勉強会force#2 HTML5によるモバイルアプリ開発勉強会force#2 HTML5によるモバイルアプリ開発
勉強会force#2 HTML5によるモバイルアプリ開発
 
「さくらのクラウド」スタートアップスクリプトを作ってみよう! - concrete5を題材に -(オープンソースカンファレンス2014 Shimane)
「さくらのクラウド」スタートアップスクリプトを作ってみよう! - concrete5を題材に -(オープンソースカンファレンス2014 Shimane)「さくらのクラウド」スタートアップスクリプトを作ってみよう! - concrete5を題材に -(オープンソースカンファレンス2014 Shimane)
「さくらのクラウド」スタートアップスクリプトを作ってみよう! - concrete5を題材に -(オープンソースカンファレンス2014 Shimane)
 

mock overview

  • 2.
  • 3.
  • 4.
  • 5. Mockモデル テスト ターゲット コラボレータ 特化 擬似 Mock Framework <<生成する>> <<委譲する>> <<生成する>> <<生成する(擬似オブジェクト)>> <<擬似オブジェクト生成を委譲>> <<テストする>> コラボレータ インターフェース <<実装する>> <<継承>> コラボレーターの代わりに擬似を返すようファクトリーメソッドをオーバーライドするターゲットのサブクラス 特化オブジェクト 擬似オブジェクトのパターンに従うコラボレーターのサブクラス 擬似オブジェクト ターゲットによって生成または取得されるオブジェクト コラボレーターオブジェクト テスト対象オブジェクト ターゲットオブジェクト 説明 主要な概念
  • 8. サンプル(概要) テストの前提 アーキテクチャ BCE モデルにて実現。 機能概要 定価金額を入力すると、DB上に保持している消費税率を乗算し、税込み価格を表示する テスト対象 MbUnit ユニットテスティングフレームワーク NMock モックオブジェクト VB.NET 実装言語 内容 カテゴリ 消費税率を取得する Entity 税込み価格を算出する。 消費税率の取得は Entity に委譲する。 Control 税込み価格を表示する Boudary 概要 アーキテクチャ層
  • 9. サンプル(クラス構成) クラス構成 TestTaxCaluculator TaxCaluculator TaxDao SubTaxCaluculator ITaxDao TaxUI このクラスをテスト 税込み価格を表示する TaxUI プレゼンテーション SubTaxCaluculator ITaxDao TaxDao TaxCaluculator TestTaxCaluculator クラス 消費税率を取得する DAO インターフェース コラボレーターインターフェース TaxCaluculator のテストクラス テスト TaxCaluculator のサブクラス。ファクトリーメソッドをオーバーライドし擬似オブジェクトを返却。 特化 消費税率を取得する DAO コラボレーター 税込み価格計算処理を保持するクラス ターゲット 概要 概念
  • 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&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
  • 15.
  • 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.