I believe I have resolved your issues with fixes I have checked-in to
the trunk. I've made a few modifications to your code to make sure it
works within the parameters of the C++ language and mockitopp
framework. Let me know if you have further issue.
#include <iostream>
#include <mockitopp/mockitopp.hpp>
struct ITradeable
{
virtual ~ITradeable() {}
virtual int GetId() const = 0;
bool operator<(const ITradeable& rhs) const
{ return GetId() < rhs.GetId(); }
bool operator==(const ITradeable& rhs) const
{ return GetId() == rhs.GetId(); }
};
struct MyTradeable : public ITradeable
{
int GetId() const
{ return 1; }
};
struct ICalculator
{
virtual ~ICalculator() {}
virtual int Calculate(const ITradeable&) = 0;
virtual int Calculate(const MyTradeable&) = 0;
};
int main(int argc, char** argv)
{
MyTradeable instrument;
mockitopp::mock_object<ICalculator> mock;
// mock ICalculator function with const ITradeable& argument
mock(static_cast<int (ICalculator::*)(const ITradeable&)>
(&ICalculator::Calculate)).when(mockitopp::matcher::any<const
ITradeable&>()).thenReturn(0);
// mock ICalculator function with const MyTradeable& argument
mock(static_cast<int (ICalculator::*)(const MyTradeable&)>
(&ICalculator::Calculate)).when(mockitopp::matcher::any<const
MyTradeable&>()).thenReturn(1);
// invoke ICalculator function with const MyTradeable& argument
std::cout << mock.getInstance().Calculate((const ITradeable&)
instrument) << std::endl;
// invoke ICalculator function with const MyTradeable& argument
std::cout << mock.getInstance().Calculate(instrument) << std::endl;
}
Thanks,
Trevor