У меня есть эта библиотека, которая требует, чтобы пользователь вызывал 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 строк ...
примечание: предположим, что пересчет дешев, так что этот дизайн в порядке.