我正在研究一个简化版本如下所示的类:
class Http_server {
public:
void start(int port)
{
start_server();
std::string content_type = extract_content_type(get_request());
}
private:
void start_server()
{
...
}
std::string get_request()
{
...
}
std::string extract_content_type(const std::string& request) const
{
...
}
};
现在我想为extract_content_type
. 问题是:它是私人的,所以我不能从外面调用它。我可以测试的唯一功能是start
,但实际上会启动服务器 ( start_server
) 并等待请求 ( get_request
)。
我怎么看,我有三个选择:
extract_content_type
公开_- 提取
extract_content_type
到实用程序类或命名空间 - Make
start_server
andget_request
virtual 并创建一个覆盖它们的模拟对象
我不想公开任何东西或移动到一个只在单个类中使用过一次的实用程序命名空间,所以最不邪恶的是选项 3。
我在 V8 代码库中至少看到了一个示例: http ://code.google.com/p/v8/source/browse/trunk/test/cctest/test-date.cc
不过,我不确定这是否是个好主意。virtual
不是 C++ 中的默认值,原因有两个:
- 它会导致性能/内存开销(但在我的情况下可能无关紧要)
- 并非每个类都应该用作基类,使其明确也是设计决策
你会怎么做?与无用的虚拟生活在一起?还是根本不测试功能?我不喜欢 TDD,我也不想这样做,但是开发像extract_content_type
针对测试这样的功能更容易。