1

これを行おうとすると、EXPECT_CALL メソッドに問題があります。

boost::program_options::variables_map vm;  
MyMock mock;  
EXPECT_CALL(mock, MyMethod(vm)).WillOnce(Return(L""));  

MyMethod は次のようになります。

std::wstring MyMethod(const boost::program_options::variables_map &vm)

コンパイル時にエラーが発生しました:

Error   17  error C2676: binary '==' : 'const boost::program_options::variable_value' does not define this operator or a conversion to a type acceptable to the predefined operator C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\utility   

Error   10  error C2784: 'bool std::operator ==(const _Elem *,const std::basic_string<_Elem,_Traits,_Alloc> &)' : could not deduce template argument for 'const _Elem *' from 'const boost::program_options::variable_value'    C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\utility

そして、さらにいくつかの同様のエラー。

4

2 に答える 2

1

さらに、boost とのマッチングを試みるときに必要であることがわかったので、マッチャーとして独自の述語を作成することもできます。

ここを参照してください。

あなたのテストでは:

using :testing::Return;
using ::testing::Truly;
EXPECT_CALL( object , connectSlot( Truly( PredicateFunc ) ) ).Times( 1 ).WillOnce(Return( boost::signals::connection() ) );

関数(またはファンクター)がある間

bool PredicateFunc( boost::signal0<void>::slot_type const& slot )
{
    /* Custom matcher code */
    return true | false;
}
于 2012-01-27T12:47:20.553 に答える
0

EXPECT_CALL を使用するには、クラスが をサポートしている必要がありますoperator==boost::program_options::variables_mapがないのでoperator==、そのままでは使えません。

独自のマッチャーを定義することもできますが、期待値をチェックする関数に渡すことをboost::program_options::variables_mapお勧めします (または、無視したり、フラグを設定したり、好きなことをしたりできます)。このようなもの :

int called = 0;
void foo( const boost::program_options::variables_map &)
{
  ++ called;
}

テストでは:

boost::program_options::variables_map vm;  
MyMock mock;
called = 0;
EXPECT_CALL(mock, MyMethod(_)).WillOnce(Invoke(&foo));  
// assert that called is 1
于 2012-01-25T11:19:35.710 に答える