1
我有一个Visual Studio 2008 C++项目,我正在为使用boost::asio::ip::udp::socket
的类实现单元测试。为了获得单元可测试性,我需要能够传入该套接字对象的模拟。创建一个接口来模拟C++对象
我的问题是,你不能有一个虚拟模板功能和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作为我的单元测试框架。
感谢