C++の単体テスト

cplus-test.png

MacOS+XCodeの場合

いろいろ検索してみると、C++のテストではGoogleTestというものが有名らしいので、それを使ってみることに。
GoogleのページにXCode Guideなるものが[1]

Google Test

  1. Googleのページからdownloadします。
  2. googleのページ[2]によると、ダウンロードしたら次はREADMEを読め、と書いてあるので読みます。
  3. READMEを開くと、各OS別に必要な条件や、ビルドの仕方が書いてあります。

私はMac+XCodeでやります。
ダウンロードしたフォルダにxcodeというフォルダがありました。
その下に.xcodeprojファイルがあるのでそこからビルドしました。
Derivedのフォルダの下の方にできたgtest.frameworkや.aのファイルがライブラリのファイルのようです。
それを単体テストしたいときは
XCodeのBuild PhasesフォルダのLine Binary With Libraries+します。
基本的にgtest.xcodeprojのサンプルの設定を真似しました。

Google Testコンパイルで遭遇したエラー

やってみたらlink関連のエラーに・・

このブログ[3]の通りにApple LLVM -Language-C++の
C++ Standard Libraryをlibstdc++ にしたら先に進めました。

次は実行時エラーに遭遇

次はこんなエラーに遭遇しました

dyld: Library not loaded: /Library/Frameworks/gtest.framework/Versions/A/gtest
  Referenced from: /Users/ユーザー名/Documents/xcode/TryGTest/DerivedData/TryGTest/Build/Products/Debug/プロダクト名
  Reason: image not found
(lldb)

このエラーメッセージはGoogleText.XCodeGuide[1]のページに書いてあったエラーと同じようなやつだったはず。。
曰く、このエラーが出てきたらDYLD_FRAMEWORK_PATHのパスが通ってないのだそうだ
DYLD_FRAMEWORK_PATHを渡すパスにはgtest.frameworkが存在するパスにしないといけないらしい。
私はそのように設定したのになぜかこのエラーが出た。
なので、自分のMacの/Library/Frameworks/フォルダの下にgtest.frameworkを置いてみた。
そしたら無事に実行できました。
うーん、この解決法でよいのか?gtestがバージョンアップしたら、これをやったことを忘れて混乱してしまいそうだ

サポートサイト Wikidot.com