У меня есть проект Visual Studio 2008 C ++, где я реализую модульные тесты для класса, который использует boost::asio::ip::udp::socket
.Чтобы добраться до тестируемости модуля, мне нужно иметь возможность передать Mock этого объекта сокета.
Моя проблема в том, что у вас не может быть функции виртуального шаблона, а boost :: asio имеет сильно шаблонизированного пользователяinterface.
Как создать интерфейс для макета библиотеки C ++, использующей шаблоны?
// socket interface that can be mocked
class IUDPSocket
{
public:
virtual void open( const boost::asio::ip::udp& protocol ) = 0;
// problem!
template <typename SettableSocketOption>
virtual void set_option( const SettableSocketOption& option ) = 0;
virtual void bind( const boost::asio::ip::udp::endpoint& endpoint ) = 0;
// Problem!
template <typename MutableBufferSequence, typename ReadHandler>
virtual void async_receive_from(
const MutableBufferSequence& buffers,
boost::asio::ip::udp::endpoint& sender_endpoint,
ReadHandler handler ) = 0;
protected:
virtual ~IUDPSocket() = 0;
};
// socket class that will be used for "normal" operation.
class BoostUDPSocket
{
// ...
virtual void open( const boost::asio::ip::udp& protocol )
{
socket_.open( protocol );
};
private:
boost::asio::ip::udp::socket socket_;
};
Если это имеет значение, я использую Google Test в качестве основы для модульного тестирования.*
Спасибо