BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース GoogleがC++ Mocking Frameworkをオープンソースに

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

数カ月前に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

この記事に星をつける

おすすめ度
スタイル

BT