Comments (2)
The problem here is that mockConnection
is not related to std::shared_ptr<IConnection> const&
by inheritance (because of the std::shared_ptr
). EXPECT_CALL(*mockDatabase, connection()).WillRepeatedly(ReturnRef(mockConnection));
constructs a temporary std::shared_ptr<IConnection>
which does not have the lifetime you expect.
Both Clang and MSVC warn here if you have the proper warnings enabled. For example:
googletest/googlemock/include/gmock/gmock-actions.h:1174:60: error: returning reference to local temporary object [-Werror,-Wreturn-stack-address]
1174 | Result Perform(const ArgumentTuple&) override { return ref_; }
Here is one way to write the test in your godbolt link:
TEST(Segv, ReturnRefMockFails)
{
std::shared_ptr<StrictMock<DatabaseMock>> mockDatabase = std::make_shared<StrictMock<DatabaseMock>>();
std::shared_ptr<StrictMock<ConnectionMock>> mockConnection = std::make_shared<StrictMock<ConnectionMock>>();
auto iconn = std::static_pointer_cast<IConnection>(mockConnection);
EXPECT_CALL(*mockDatabase, check()).WillRepeatedly(Return(true));
EXPECT_CALL(*mockDatabase, connection()).WillRepeatedly(ReturnRef(iconn));
EXPECT_CALL(*mockConnection, ok()).WillRepeatedly(Return(true));
ASSERT_TRUE(mockDatabase->check());
ASSERT_TRUE(mockDatabase->connection()->ok());
ASSERT_EQ(mockDatabase->connection(), mockConnection);
}
from googletest.
Thanks @derekmauro! That is helpful and I will give it a try.
from googletest.
Related Issues (20)
- [Bug]: FloatingEqMatcher doesn't work with const float value types HOT 1
- Many errors building googletest with cmake and make on Windows 10 HOT 1
- [FR]: `FetchContent` on `googletest` subfolder HOT 1
- [FR]: Matcher for absl::StatusOr and std::expected HOT 6
- Google HOT 1
- [Bug]: Please title this bug report
- [Bug]: Again, Google, wtf is wrong with you
- [Bug]: Google has a wicked infested mindset and it is going down because of it. HOT 1
- [Bug]: Double free or corruption detected in first parameterized test HOT 3
- [FR]: Expose SetUpTestSuite and TearDownTestSuite getters and setters. HOT 1
- [Bug]: gtest_main.so doesn't contain symbols from gtest.so HOT 2
- [Bug]: Flaky infinite `AddressSanitizer:DEADLYSIGNAL` loop when using gtest in github CI HOT 5
- [Bug]: Cannot use structured binding in name generator lambda in INSTANTIATE_TEST_SUITE_P HOT 2
- [Bug]: A race condition exist between the Watcher thread and the main thread terminating.
- [FR]: Add support for building GoogleTest on Xbox platforms HOT 2
- [Bug]: Improve compile-time checking of return values from actions in EXPECT_CALL HOT 11
- EXPECT_EXIT、ASSERT_EXITにてstderrの取得のため以下を実行するとシグナル6で異常終了する。 HOT 1
- [FR]: Skipped reasons in JSON output
- bazel Windows builds are currently failing for automated PR runs on GitHub
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from googletest.