У меня есть метод, который вызывает pthread_create(...)
, можно ли издеваться и ожидать выхода pthread_create
так что я на самом деле не запускаю поток?
Я спрашиваю об этом, потому что весь класс является Mock Object, и как только я удаляю объект в конце теста, сегменты потока.
Да. Объявите фиктивный класс и функции:
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
Других решений пока нет …