简体   繁体   中英

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

I would like to test method "methodToTest" in class A:

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);
    }
};

I have got a mock class:

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

Below I have got a test case:

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();
}

Generally I don't know how transfer a method "run" from Mock class "RunMock" in "UecSimplePortTestSuite::SetUp()". I would like to do this, because I would like to "EXPECT_CALL(*m_runMock, run(_));" in UecSimplePortTestSuite.testForwardMessage to test "methodToTest()". I think that good idea could be to use lmbda, std::boost::bind or something like this.

You can pass a lambda to the constructor of A in the SetUp() :

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

This :

m_runMock->run

is not going to do what you thing, and it is a compilation error. You can read this parashift QA and here how to use pointer to member function.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM