kkamegawa's weblog

Visual Studio,TFS,ALM,VSTS,DevOps関係のことについていろいろと書いていきます。Google Analyticsで解析を行っています

FakeとMockとStubの違い

ちょっと古い話ですが、3/22にC#ユーザー会でVisual Studio 11をネタにしていろいろディスカッションしました。
第76回codeseek勉強会&第16回日本C#ユーザー会 勉強会 - 日本 C# ユーザー会
Fakes Frameworkについてid:neueccさんがデモってくれたのですが、その時「FakeとStubって何が違うの?」という質問が出ました。みんなイメージは多分共通していたと思います。しかし言語化できませんでした。たまたま今読んでいる本にFake/Mock/Stubの違いについても書いていましたのでちょっと引用します。

  • Stub: Prevent the dependency from obstructing the method-under-test and torespond in a way that helps it proceed through its logical steps.
  • Mock: Allow the test code to verify that the code-under-test’s interaction with the dependency is proper, valid, and expected.

読んでる本。

Pro .NET Best Practices

Pro .NET Best Practices

読んでる本でもこの本から引用していると書いていた。
The Art of Unit Testing: With Examples in .net

The Art of Unit Testing: With Examples in .net

種類 説明
Stub 主にメソッドの処理の流れのチェックを行う際に使用する。オブジェクトインスタンスとは直接関係ない。テストに依存するから独立してメソッドのテストする
Mock テスト対象のメソッドが相互に動作するための環境を提供する。インスタンスはテスト用に生成された専用の環境の中で動作する
Fake 「偽物」という訳があるように、同じ機能を持つ別物に差し替える。StubとMock両方の性質を持つ。

つまりVisual Studio 11のFakes Frameworkは.NET Frameworkの偽物だから、差し替えて従来のStubではテストが難しかった、システム情報に依存する代表格の日付やプリンタ情報などに依存するテストがやりやすいものということなんでしょうね。