2012-12-10 55 views
2

我有一个方法,调用pthread_create(...)。是否有可能嘲笑并期待pthread_create的输出,所以我实际上并没有启动线程?使用gmock嘲笑pthread_create

我在问这是因为整个类是一个模拟对象,只要我在测试用例的末尾删除线程段的对象。

+0

是否mock对象的析构函数做一些事情相关的线程?它不应该只是段错误,因为它的构造对象已经消失了。 –

+0

是析构函数,删除线程所需的本地信息 – Kam

+0

这可能会导致问题 - 线程试图访问您删除的数据。您应该发送线程某种信号退出,然后在删除其数据之前等待它使用'pthread_join'完成。 –

回答

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