我有一个调用pthread_create(...)
的方法。是否可以模拟并期望pthread_create
的输出,所以我实际上没有启动线程?
我问这个是因为整个类都是一个Mock对象,一旦我在测试用例的末尾删除了该对象,那么线程就会分段。
答案 0 :(得分:3)
是。声明模拟类和函数:
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