我有一个Visual Studio 2008 C ++项目,我正在为使用boost::asio::ip::udp::socket
的类实现单元测试。为了获得单元可测试性,我需要能够传入该套接字对象的模拟。
我的问题是你不能拥有虚拟模板功能而且boost :: asio有一个非常模板化的用户界面。
如何为使用模板的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作为我的单元测试框架。
由于
答案 0 :(得分:0)
两种可能性:
boost::asio
中的类型,如果类型足够复杂,请使用抽象:IMutableBufferSequence
,IEndpoint
等......