Перемешивание pthread_create с использованием gmock

У меня есть метод, который вызывает pthread_create(...), можно ли издеваться и ожидать выхода pthread_create так я на самом деле не запускаю поток?

Я спрашиваю об этом, потому что весь класс является Mock Object, и как только я удаляю объект в конце теста, сегменты потока.

1 ответ

Решение

Да. Объявите фиктивный класс и функции:

struct phtread_interface
{
    virtual int pthread_create(...) = 0;
    ... // other methods
};

class pthread_mock : public phtread_interface
{
public:
    MOCK_METHOD1(pthread_create, int(...));
    ....
};

pthread_interface *current_pthread_mock;

void set_current_pthread_mock(phtread_interface *mock)
{
    current_pthread_mock = mock;
}

int pthread_create(...)
{
    return current_pthread_mock->pthread_create(...);
}

В каждой тестовой функции выполните следующее:

pthread_mock mock_obj;
set_current_pthread_mock(&mock_obj);

// set expectations over mock_obj, use pthread_create ...    

В исходном файле с pthread_create добавить условное включение как:

#ifndef TESTING
#include <pthread.h>
#else
#include "pthread_mock.h"
#endif
Другие вопросы по тегам