まさるblog

越後在住子持ちプログラマー奮闘記 - Author:まさる(高野 将、TAKANO Sho)

目次

Blog 利用状況

ニュース

著書

2010/7発売


Web掲載記事

@IT

.NET開発を始めるVB6プログラマーが知るべき9のこと

CodeZine

実例で学ぶASP.NET Webフォーム業務アプリケーション開発のポイント

第1回 3層データバインドを正しく活用しよう(前編)

ブログパーツ


書庫

日記カテゴリ

コミュニティ

Moq探訪~その1~:Moqとは何か?Mockとは何か?そしてMockの生成 #adcjcs

今日からぼちぼちと、最近人気があるMockライブラリの「Moq」について、学習しながら紹介していこうと思います。

初回は、Moqとは何か?Mockとは何か?そして、Moqを使ったMockオブジェクトの作成方法について紹介します。

 

なお、このエントリはC# Advent Calendar jp: 2010 : ATNDへの参加エントリでもありますので、興味のある方はそちらもどうぞ。

 

Moqとは?

.NETで使える「Mockオブジェクト」を扱うオープンソース・ライブラリです。~qの名前の通り、Linqのようにメソッドチェーンとラムダ式を使って、Mockオブジェクトの操作が行えることが特徴です。

公式サイト:moq - Project Hosting on Google Code

 

Mockオブジェクトとは?

まずは”mock”を英和辞典で引いてみましょう。

“mock”の検索結果(157 件):英辞郎 on the Web:スペースアルク

【名】

  1. 嘲り、冷笑
  2. 模造品、まがい物

つまり、Mockオブジェクトとは本来のオブジェクトの「模造品」で、元となるオブジェクトと同じ「インターフェース」(C#のinterfaceではなく、広い意味でのインターフェース)を持ち、その振る舞いを偽装するオブジェクトのことを言います。

 

Mockオブジェクトの使い道

Mockオブジェクトは、次のような用途で使います。

  1. いわゆる「部品」が完成するまでの代用品として使用する。
  2. MSTest、JUnitなどでUnitTestを行う際、テスト対象クラスの中でデータベースなど外部に依存するオブジェクトを差し替え、対象クラス単体でのテストを可能にする。

 

1.部品の代用品

アプリケーション開発を進めていくうえで、「部品」というものはどうしてもその作成が遅れがちなものです。

そんなとき、部品のインターフェースだけ決めておけば、あとはMockオブジェクトで部品の動作を偽装して、アプリケーションのプログラミングを続行できます。

プログラム作成者は、部品が完成したらMockオブジェクトを本物に差し替えるだけでよくなります。

 

・Mockなし

image

・Mockオブジェクト使用

image

 

2.UnitTestでの依存オブジェクト差し替え

データベースアクセスやネットワークアクセス、サードパーティ製のモジュール呼び出しなど、外部に「依存」したクラスをテストする際、動作環境がそろっていないとUnitTestが行えなかったり、行えても時間がかかってしまったりします。

そんな時は、外部に依存する部分をインターフェースに切りだし、切り出したインターフェースをもとにMockオブジェクトを作成することで、外部への「依存」を断ち切り、純粋にテスト対象クラスのみのUnitTestが行えるようになります。

 

・Mockなし

image

・Mockオブジェクト使用

image

 

Moqを使ったMockオブジェクトの作成

事前準備

まずは、Moqの公式サイトからMoqをダウンロードします。

Downloads - moq - Project Hosting on Google Code

(今回はMoq.4.0.10827を使います。)

image

 

ダウンロードしたファイルを解凍してできたMoq.dllを、VSのプロジェクトで参照します。

image

 

そして、プロジェクトのターゲットフレームワークが、「.NET Framework 4 Client Profile」ではなく「.NET Framework 4」であることを確認します。

image

 

最後に、C#ならusing、VBならImportsを使って、Moq名前空間をコードに追加します。

image

 

Mockオブジェクトの作成

Mockオブジェクトを作成するには、Moq.Mockクラスのコンストラクタを使い、次のようなコードを書きます。

// Mockの作成
var mock = new Mock<IList>();

// 作成したMockオブジェクトの取得
var list = mock.Object;

まず、Mockコンストラクタの型引数に、Mockを作成したいinterfaceやclassを指定して、Mockクラスのインスタンスを生成します。

そして、Mock.Objectプロパティで、型式数で指定したinterfaceやclassのMockオブジェクトを取得します。

 

Mockの使用

作成したMockオブジェクトは、通常のオブジェクトを同じように使えます。

Console.WriteLine(list.Count);

image

 

まとめ

  • MoqとはオープンソースのMockingライブラリ。
    • Mockとはオブジェクトの模造品で、元オブジェクトの振る舞いを偽装することができる。
    • Mockを使うことで、部品と部品を使用するプログラムの並行開発や、依存を排除したUnitTestの実行等が可能となる。
  • Moqでのオブジェクト作成はMock<T>コンストラクタで行う。
    • Mockオブジェクト取得はMock.Objectプロパティを使う。
  • Moqで作成したMockオブジェクトは、通常のオブジェクトと同じように使える。

 

次回以降の予定

具体的なMoqの使い方を順に学習し、紹介していこうと思います。

投稿日時 : 2010年12月3日 23:56

Feedback

# Moq探訪~その2~:Mockライブラリを使うと何が嬉しいのか 2010/12/06 5:52 まさるblog

Moq探訪~その2~:Mockライブラリを使うと何が嬉しいのか

# OPC Diary &raquo; Blog Archive &raquo; C# Advent Calendar jp: 2010 ?????? #adcjcs 2010/12/08 5:53 Pingback/TrackBack

OPC Diary &raquo; Blog Archive &raquo; C# Advent Calendar jp: 2010 ?????? #adcjcs

# OPC Diary &raquo; Blog Archive &raquo; C# Advent Calendar jp: 2010 ???????????? 2010/12/21 6:40 Pingback/TrackBack

OPC Diary &raquo; Blog Archive &raquo; C# Advent Calendar jp: 2010 ????????????

# OPC Diary &raquo; Blog Archive &raquo; C# Advent Calendar jp: 2010 ??????! ??????! #adcjcs 2010/12/25 20:50 Pingback/TrackBack

OPC Diary &raquo; Blog Archive &raquo; C# Advent Calendar jp: 2010 ??????! ??????! #adcjcs

# ブランド財布コピーN級激安通販専門店 2016/02/25 21:13 f7ak4ce401

http://www.ooobag.com/about/item_15.html
エルメス ケリー激安}}}}}}

# ダミエ財布コピー 2017/07/13 12:46 lprpwbfdyb@icloud.com

ヴィトンコピー品激安販売店2017新品大SALE
ルイ・ヴィトンコピー品激安販売店の新品大SALEが開催します。
ルイヴィトン人気コピー品、コピールイヴィトン新作、ルイヴィトンダミエコピー、ルイヴィトンモノグラムコピー、コピーブランド腕時計…
いろいろ新品が続々登場します。バッグ、靴、帽子、スカーフ...
お綺麗を展示ため、ぜひおすすめの逸品です。
時間の制限がない、いつでもご愛用頂きます。
ダミエ財布コピー http://www.copysale.net

# シャネル財布コピー品 2017/07/23 19:47 hvmmjkva@icloud.com

新舗 新型-大注目!

★ 腕時計、バッグ、財布、ベルト、ジュエリー、コピーブランド
★経営理念:
1.最も合理的な価格で商品を消費者に提供致します.
2.弊社の商品品数大目で、商品は安めです]!★商品現物写真★
3.数量制限無し、一個の注文も、OKです.
4.1個も1万個も問わず、誠心誠意対応します.
5.不良品の場合、弊社が無償で交換します.
以上宜しくお願いします。
不明点、疑問点等があれば、ご遠慮なく言って下さい.
以上 よろしくお願いいたします。

# ショパール時計 2017/08/10 18:09 mdusdj@live.com

ブランド激安市場大特価
当店には、ルイヴィトン、シャネル、グッチ、コーチ、ロレックス、プラダ、 ディオール、ブルガリ財布 その他小物等、
買う多いです、恵みの多いです、
一回注文5件以上、贈呈ルイヴィトンキーケース1個
注文は期待しています。。。
各種海外有名ブランド品を豊富に取り揃え、しかもお客様を第一と考えて、驚きの低価格で提供しております
■スタイルが多い、品質がよい、価格が低い!
■ 送料無料(日本全国) ご注文を期待しています!
■信用第一、良い品質、低価格は
■当社の商品は絶対の自信が御座います。
激安、安心、安全にお届けします.品数豊富な商
商品数も大幅に増え、品質も大自信です100%品質保証!
満足保障!リピーター率100%!
ショパール時計 http://www.kopii.net/products/p3/3/index.htm

# ルイヴィトンコピー 2017/09/05 3:44 lxlhfsdhar@live.jp

ルイヴィトン財布 限定
お気に入りのルイヴィトンモノグラム財布、ダミエ財布、マルチカラー財布、ヴェルニ財布 など豊富な品揃え!
ルイヴィトンの名刺入れカードケースが、ずらり勢揃い!ライン別型番別に価格比較 ができるルイヴィトンショッピングナビ!
ルイヴィトンの新作や人気の財布が、ずらり勢揃い!ルイヴィトンの財布を探すなら「 ルイヴィトンナビ!」でチェック!ライン別型番別に価格比較ができるルイヴィトン ショッピングナビ!
ヴィトン 財布 新作、ヴィトンのショルダーバッグ 品質が良いし、また 新しいタイプの価格と個人的な最良の選択です、あなたはそれを選択することができ ます。
有名ブランドの財布を多数取り揃え欲しいルイヴィトン-財布新作がすぐ見つかる!
ルイヴィトンコピー http://www.newkokoku.com

タイトル  
名前  
Url
コメント