0

上記のインターフェイスを利用するクラスで使用するために、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);
}
4

1 に答える 1