[英]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.