C++のテストで困ったこと
Boost.Testには触ったことがあったんですが、紫ログさんのC++のテストフレームワークを試食を見てgoogletest面白そうだなーと思って使ってみました。Google Codeのsvnリポジトリからチェックアウトしてきて、.slnファイル開いてビルド。それでとりあえず動作チェックしたら、いざ本番。テスト対象に適用し始めたんですが……
元々テスト対象のコードがテストとか全然考慮してなかったので、テストしようにも困るようなコードが。要約するとこんなんですね。
void hoge(int n) { ASSERT( 0 <= n ); if( n < 0 ){ throw ArgumentException(); } //... }
デバッグビルド時にはアサート引っかけて、リリースビルドには例外出すつもりだったんですが、これに対して以下のようなテストケース書くと当然デバッグビルドでは失敗します。
TEST( HogeTest, Hogeeeee ) {
ASSERT_THROW( hoge( -1 ), ArgumentException );
}
そもそもこんなコードを書くなって話になるんでしょうか。WTLだと、例えば
DWORD GetStyle() const throw() // CWindowクラス { ATLASSERT(::IsWindow(m_hWnd)); return (DWORD)::GetWindowLong(m_hWnd, GWL_STYLE); }
というようなコードがあるので、これを真似てみたんですが、どうもテストには不向きなようです。これは困った……