假設我有一個方法
void Mock::foo(const A& obj);
我想檢查它是用物件obj而不是它的副本來呼叫的:
A obj;
EXPECT_CALL(mock, foo(obj));
mock->foo(obj);
我怎樣才能檢查這個?我在這里Address(m)找到了匹配器。但我在 中找不到它,即它無法編譯。::testing
uj5u.com熱心網友回復:
正如評論中提到的,::testing::Address()匹配器是在 GoogleTest 1.11 中引入的。
您可以改用::testing::Ref()匹配器,它在下面做同樣的事情(比較地址)并且至少從 GoogleTest 1.8 開始可用(在線查看):
#include <gmock/gmock.h>
struct Data
{};
struct Mock
{
MOCK_METHOD(void, foo, (const Data& d), ());
};
struct ClassUnderTest
{
Mock* dependency;
void methodUnderTest(const Data& d)
{
dependency->foo(d);
}
void methodThatCopies(const Data& d)
{
Data copy = d;
dependency->foo(copy);
}
};
TEST(X, Correct)
{
Mock m;
Data d;
ClassUnderTest uut {&m};
EXPECT_CALL(m, foo(::testing::Ref(d)));
uut.methodUnderTest(d);
}
TEST(X, Fail)
{
Mock m;
Data d;
ClassUnderTest uut {&m};
EXPECT_CALL(m, foo(::testing::Ref(d)));
uut.methodThatCopies(d);
}
int main(int argc, char** argv)
{
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/436277.html
上一篇:設定笑話模擬的問題
