BT

GoogleがC++ Mocking Frameworkをオープンソースに

| 作者: Abel Avram フォローする 7 人のフォロワー , 翻訳者 編集部 フォローする 0 人のフォロワー 投稿日 2008年12月15日. 推定読書時間: 3 分 |

数カ月前にC++テストフレームワークをオープンソースにした(参考記事)後、GoogleはBSDライセンス(リンク)のもと、Google C++モッキングフレームワーク(Google Mock)(リンク)をオープンソースにした。

GoogleのソフトウェアエンジニアであるZhanyong Wan氏によると、Google MockはGoogleの100を超えるプロジェクトで使用されており、jMock(リンク)およびEasyMock(リンク)によって着想させられている。そのフレームワークは、Linux、WindowsまたはMac OS Xで使用可能であり、C++デベロッパを取り扱う。Zhanyong氏は、モックの例(リンク)を以下のように示している。

class TaxServer {   // Returns the tax rate of a location (by postal code) or -1 on error.
  virtual double FetchTaxRate(
    const string& postal_code) = 0;
  virtual void CloseConnection() = 0;
};
 

class MockTaxServer : public TaxServer {     // #1
  MOCK_METHOD1(FetchTaxRate, double(const string&));
  MOCK_METHOD0(CloseConnection, void());
};
TEST(ShoppingCartTest,  StillCallsCloseIfServerErrorOccurs) {
  MockTaxServer mock_taxserver;              // #2
  EXPECT_CALL(mock_taxserver, FetchTaxRate(_)).

WillOnce(Return(-1));                   // #3
  EXPECT_CALL(mock_taxserver, CloseConnection());
  ShoppingCart cart(&mock_taxserver);        // #4
  cart.CalculateTax();  // Calls FetchTaxRate()
                        // and CloseConnection().
}                                            // #5

  1. インターフェイスからモッククラスを導き出す。それぞれの仮想メソッドで、いくつ引数があるか数え、結果 nを命名し、引数がメソッドの名前であるMOCK_METHODnを使用してそれを定義する。

  2. モッククラスのインスタンスを作成する。通常実オブジェクトを使用するようなことろで使用される。

  3. モックオブジェクトに対する期待を定める(どう使用されるか?何をするのか?)。たとえば、最初のEXPECT_CALLは、FetchTaxRate() が呼び出され、エラーを返すと書いてある。下線 (_) は、引数は何でもなり得るmatcherであると書いてある。GoogleのMockには、引数がどうあるべきか正確に指定するために使用できる、多くの matcherがある。また、独自のmatcherを定義したり、正確な値を使用することができる。

  4. モックオブジェクトを使用するコードを用いる。モックメソッドが予想以上の回数呼び出されたり、誤った引数で呼び出された場合、すぐさまエラーになる。

  5. モックオブジェクトが破壊されると、すべての期待が満たされていることを確認する。

役立つリンク:ホームページ(リンク)。完全な文書(リンク)。バイナリダウンロード(リンク)。Google Mock for Dummies(リンク)は、例や説明を交えながら、Google Mockの概要を簡潔にまとめたものである。

 

原文はこちらです:http://www.infoq.com/news/2008/12/Google-Mock

この記事に星をつける

おすすめ度
スタイル

こんにちは

コメントするには InfoQアカウントの登録 または が必要です。InfoQ に登録するとさまざまなことができます。

アカウント登録をしてInfoQをお楽しみください。

あなたの意見をお聞かせください。

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする
コミュニティコメント

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

ディスカッション

InfoQにログインし新機能を利用する


パスワードを忘れた方はこちらへ

Follow

お気に入りのトピックや著者をフォローする

業界やサイト内で一番重要な見出しを閲覧する

Like

より多いシグナル、より少ないノイズ

お気に入りのトピックと著者を選択して自分のフィードを作る

Notifications

最新情報をすぐ手に入れるようにしよう

通知設定をして、お気に入りコンテンツを見逃さないようにしよう!

BT