2

を呼び出すメソッドがありますpthread_create(...)。の出力をモックして期待することは可能pthread_createですか?実際にスレッドを起動しませんか?

クラス全体がモックオブジェクトであり、テストケースの最後にオブジェクトを削除するとすぐにスレッドセグメントになるため、これを求めています。

4

1 に答える 1

4

はい。モッククラスと関数を宣言します。

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
于 2012-12-10T16:29:44.580 に答える