我有这个库,要求用户在使用它之前先调用Init()和Close()(例如,获取句柄)。 幸运的是,对Init()和Close()进行了重新计数,因此无需跟踪是否初始化了库。 现在由于方便和安全(只要有提手,refcount为> 0),我想为提手制作RAII包装器,例如
void Init(){};
void Close(){};
template<typename H>
void Deregister(H*){};
template<typename H>
struct SafeHandle{
// requires: caller should make sure that handle is valid handle
SafeHandle (H* handle): handle_(handle){
Init();
}
~SafeHandle(){
handle_->Close();
Deregister(handle_); // library function for disposing of handles
Close();
}
// delete copy ctor...
H* const handle_;
};
struct Handle{
void Close(){};
};
int main() {
SafeHandle<Handle> i(nullptr);
}
非常简单。 现在的问题是如何进行测试?
我要做的一件事就是创造 ILibrary与Open(),Close(),Deregister()方法的接口,这些方法包装匹配的自由函数,然后在测试中对其进行GMOCK。 其次,我需要使用计数Close()方法为句柄创建测试类型。
还有更好的方法吗? 对于10行结构,这似乎是很多测试代码。
注意:假设refcounting很便宜,所以这种设计还可以。