【发布时间】:2012-03-23 17:02:17
【问题描述】:
我有一个 Visual Studio 2008 C++ 项目,我正在为使用 boost::asio::ip::udp::socket 的类实现单元测试。为了获得单元可测试性,我需要能够传入该套接字对象的 Mock。
我的问题是你不能有一个虚拟模板函数,而 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 作为我的单元测试框架。
谢谢
【问题讨论】:
标签: c++ unit-testing boost interface