簡體   English   中英

如何使用std :: function在Google測試中測試方法?

[英]How to test method in google test, using std::function?

我想在A類中測試方法“ methodToTest”:

typedef std :: function F_global;

struct A
{
    F_global m_F_global;

    A(F_global m_F_global) : p_F_global(m_F_global) {}

    void methodToTest()
    {
        m_F_global(5);
    }
};

我有一個模擬課:

類RunMock {public:MOCK_METHOD1(run,void(int)); };

下面我有一個測試用例:

class TestClass : public testing::Test
{
protected:
    void SetUp();

    std::unique_ptr<A> m_aa;
    std::unique_ptr<RunMock> m_runMock;
};

void UecSimplePortTestSuite::SetUp()
{
    m_aa = make_unique<A>(m_runMock->run);//IT DOESN'T WORK I DON'T KNOW HOW TO FORWARD A METHOD run from RunMock to constructor
}

TEST_F(UecSimplePortTestSuite, testForwardMessage)
{
    EXPECT_CALL(*m_runMock, run(_));
    m_aa->methodToTest();
}

通常,我不知道如何從“ UecSimplePortTestSuite :: SetUp()”中的Mock類“ RunMock”轉移方法“ run”。 我想這樣做,因為我想“ EXPECT_CALL(* m_runMock,run(_));” 在UecSimplePortTestSuite.testForwardMessage中測試“ methodToTest()”。 我認為,好主意可能是使用lmbda,std :: boost :: bind或類似的東西。

您可以在SetUp()中將lambda傳遞給A的構造函數:

m_runMock.reset( new RunMock );
m_aa.reset( new A( [&](int value){ m_runMock->run(value); } );

這個 :

m_runMock->run

不會做什么,這是編譯錯誤。 您可以閱讀此parashift質量檢查以及此處如何使用指向成員函數的指針。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM