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)
- 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
- Matchers for C++20 ranges
- [Bug]: Windows Death Tests have different behavior for CLI options compared to other platforms HOT 1
- [Bug]: Compile break for chrono timepoint formatting for macOS target < 13.3 and Xcode 15.3
- [Bug]: StrictMock construction crashed when included in benchmark fixture HOT 1
- What is the correct way to report an error from an Environment teardown?
- [Bug]: MacOSX build gtest failed with /test_output.xml not found HOT 1
- [Bug]: CMake error (set_target_properties) HOT 1
- [FR]: Add z/OS platform for death test support HOT 2
- [Bug]: Undefined symbol to `testing::internal::PrintTo` for `std::u8string` HOT 1
- [Bug]: MSVC ElementsAreArray compilation errors
- [FR]: Add NOLINT to quiet clang-tidy on EXPECT_CALL
- [Bug]: ASAN heap-buffer-overflow in ParseGoogleTestFlagsOnlyImpl() in gtest.cc HOT 1
- [FR]: Loosen restrictions on what types are considered containers for matchers
- [Bug]: std::length_error from cmake function "generate_testname_guards()" HOT 1
- [Bug]: Undefined reference building on Windows
- [Bug]: Skipped tests' messages are displayed in brief mode
- [Bug]: Cannot mock recursive lambda with deducing this parameter
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.