上記のインターフェイスを利用するクラスで使用するために、HippoMock を使用してインターフェイスをモックしようとしています。モック オブジェクトを作成し、ExceptCallOverload をセットアップすると、すべて正常にコンパイルされます。ただし、私がテストしているクラスは、mock::NotImplemented 関数を呼び出すモック オブジェクトを呼び出します。
また、私がモックしているルーチンはインターフェイスへの参照を受け入れますが、渡されるオブジェクトは shared_ptr に格納されます。wall .With で shared_ptr オブジェクトを渡すと、comparer::compare can't match template parameters というエラーが表示されますが、これは理解できます。したがって、インターフェイスへの参照を渡すだけでは、ピュア仮想クラスをインスタンス化できませんというエラーが表示されます。
これは、HippoMark の使用に関して、岩と難しい場所の間に私を置いているように感じます.
小さな例:
class objectA_interface
{
public:
virtual double getDouble() = 0;
};
class objectB_interface
{
public:
virtual double getDouble() = 0;
};
class test_interface
{
public:
virtual void fun(objectA_interface&) = 0;
virtual void fun(objectB_interface&) = 0;
};
void do_something()
{
std::shared_ptr<objectA_interface> objectA;
std::shared_ptr<objectB_interface> objectB;
MockRepository mocks;
test_interface* mock_interface = mocks.Mock<test_interface>();
//error C2259: 'object_interface' : cannot instantiate abstract class
mocks.ExpectCallOverload(mock_interface, (void (test_interface::*)(objectA_interface&))&test_interface::fun).With(*objectA);
mocks.ExpectCallOverload(mock_interface, (void (test_interface::*)(objectB_interface&))&test_interface::fun).With(*objectB);
//error C2665: 'HippoMocks::comparer<A>::compare' : none of the 2 overloads could convert all the argument types
mocks.ExpectCallOverload(mock_interface, (void (test_interface::*)(objectA_interface&))&test_interface::fun).With(objectA);
mocks.ExpectCallOverload(mock_interface, (void (test_interface::*)(objectB_interface&))&test_interface::fun).With(objectB);
}