Есть ли простой способ проверить помощники RAII для библиотеки, которая требует вызовов функций (Init () и Close () бесплатно) - PullRequest
0 голосов
/ 25 февраля 2019

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

примечание: предположим, что пересчет дешев, так что этот дизайн в порядке.

...