使用TDD时隐藏文件访问实现详细信息
Hide file access implementation details while using TDD
我正在尝试创建一个从tablefileinterface继承的csvtablefile类。为了单位测试类,我想模拟所有文件访问。
这是一个问题:为了能够模拟文件访问,我必须介绍WinapiInterface(或您想称呼的任何内容,例如FileioInterface(,必须将其提供给CSVTableFile类的构造函数。但是,这显示了所有人的实现,该实现被授予OpenFile。如果我想将内部设备从OpenFile更改为Ifstream,我必须更改构造函数,因为我不需要WinapiInterface即可传递到类,而是FileStreamInterface。
我对这种情况并不特别满意,但我无法提出解决方案。我想念什么吗?
class WinApiInterface {
public:
virtual HFILE WINAPI OpenFile(
_In_ LPCSTR lpFileName,
_Out_ LPOFSTRUCT lpReOpenBuff,
_In_ UINT uStyle ) = 0;
}
class WinApi : public WinApiInterface {
public:
virtual HFILE WINAPI OpenFile(
_In_ LPCSTR lpFileName,
_Out_ LPOFSTRUCT lpReOpenBuff,
_In_ UINT uStyle ) {
return ::OpenFile(lpFileName, lpReOpenBuff, lpReOpenBuff);};
}
class TableFileInterface {
public:
virtual int Open(std::string file) = 0;
virtual int Close() = 0;
virtual std::string GetCellAsString(size_t row; size_t column) = 0;
virtual double GetCellAsDouble(size_t row; size_t column) = 0;
}
class CsvTableFile : public TableFileInterface {
public:
CsvTableFile(const WinApiInterface& win_api)
: win_api_(win_api){};
~CsvTableFile(){};
virtual int Open(std::string file) { *CODE USING win_api_.OpenFile(...)*};
virtual int Close() {...};
std::string GetCellAsString(size_t row; size_t column) {...};
double GetCellAsDouble(size_t row; size_t column) {...};
protected:
WinApiInterface win_api_;
}
如果您的主要目标是防止CsvTableFile
需要更改,则可以模板并将开放逻辑转移到模板参数对象。
template <class T>
class CsvTableFile : public TableFileInterface {
public:
CsvTableFile(const T& _fileopener):fileopener(_fileopener){}
int Open(std::string file) { fileopener.OpenFile(...); }
T& fileopener;
...
};
然后,为要在每个类中使用并实现OpenFile
方法的每种类型的文件处理创建一个类。
相关文章:
- std::extent 实现详细信息说明
- VisualC++ 2010 有没有办法找出有关未处理异常错误的更多详细信息
- 如何使用软化工具包从 OPC UA 服务器异步读取操作回调中的数据值响应中获取 NodeId 详细信息
- protobuf,如何在protobuf消息中遍历所有集合字段,我不知道详细信息?(C++)
- AVX2收集指令使用详细信息
- 只知道运行时的数据类型.如何将数据详细信息隐藏到使用它们的其他类
- CppUnit:如何立即打印故障详细信息
- 我可以为 C++ 类提供不完整的标头以隐藏实现详细信息吗?
- CPP 异常获取抛出调用方的详细信息
- 内存映射 IO 概念详细信息
- 如何在文本文件中搜索员工记录(按名称)并仅显示其详细信息?
- 使用TDD时隐藏文件访问实现详细信息
- 急需有关_doserrno(MSVC)的详细信息
- 主 - Embarcadero C++生成器 10.2 中的详细信息数据集
- 实现 std::tuple 的详细信息
- 模板或函数参数作为 doxygen 中的实现详细信息
- 向Doxygen隐藏模板实现详细信息
- 通过内部指针隐藏实现详细信息
- C++Stdlib IO实现详细信息
- 视觉 C++标准是否指定编译器的 STL 实现详细信息