Перемешивание pthread_create с помощью gmock

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

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

2

Решение

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

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
3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]