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);
}

というようなコードがあるので、これを真似てみたんですが、どうもテストには不向きなようです。これは困った……