有没有一种简单的方法可以为需要Init()和Close()免费函数调用的库测试RAII助手

时间:2019-02-25 19:35:33

标签: c++ unit-testing templates gmock

我有这个库,要求用户在使用它之前先调用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很便宜,所以这种设计还可以。

0 个答案:

没有答案