Comments (5)
The last few days I was trying to think about direct support for out parameters but I could not come up with an elegant idea. Meantime you can specify the value of an out pram by stubbing the method with a lambda replacement. For example:
struct ApiInterface {
virtual bool apiMethod(int a, int b, int& result) = 0;
};
Mock<ApiInterface> mock;
When(Method(mock, apiMethod)).AlwaysDo([](int a, int b, int& result) {
result = a + b;
return true;
});
int result;
ASSERT_TRUE(mock.get().apiMethod(1,2,result));
ASSERT_EQUAL(3,result);
I will continue thinking about it, maybe something similar to argument matchers will do the work.
Any suggestion?
from fakeit.
First, I have to say I'm not very familiar with Gmock. When I look at its support for output arguments, I wouldn't say the test code looks very readable, despite its flexibility. I hope your solution wouldn't compromise test code clarity, which is one of the biggest features of this project, right?
I guess using lambdas to do the dirty work would suffice for now.
from fakeit.
I agree, gmock is a good example for what we DON'T want to do.
Here is a gmock example without out parameters:
EXPECT_CALL(testobject, testfunction(,, _))
.WillOnce(testing::SetArgReferee<0>(value1))
.WillOnce(testing::SetArgReferee<1>(value2))
.WillOnce(Return(true));
The current fakeit alternative is:
When(Method(testobject, testfunction)).Do([](auto& arg1, auto& arg2, auto
arg3)
{
arg1 = value1;
arg2 = value2;
return true;
});
As you said, my biggest effort is trying to create a simple & expressive
syntax.
How about?:
When(Method(testobject, testfunction).Using(SetValue(value1),
SetValue(value2), _)).Return(true);
It is a little confusing though it is very short.
What we have here is an "ArgumentAssigner" instead of an "ArgumentMatcher"
for the first 2 parameters. The third parameter is an "in" parameter and we
use a simple matcher for it.
???
On Fri, May 8, 2015 at 8:01 AM, Binshuo Hu [email protected] wrote:
First, I have to say I'm not very familiar with Gmock. When I look at its
support for output arguments, I wouldn't say the test code looks very
readable, despite its flexibility. I hope your solution wouldn't compromise
test code clarity, which is one of the biggest features of this project,
right?
I guess using lambdas to do the dirty work would suffice for now.—
Reply to this email directly or view it on GitHub.
Eran
972-52-8387550
from fakeit.
···
When(Method(testobject, testfunction).Using(SetValue(value1),
SetValue(value2), _)).Return(true);
···
The Using
kinda get me lost. The Using
part ought to work with matchers, since they are conditions declared by the When
. But here setters rather than matchers are used, I simply coudn't comprehend the intention of this statement. Does this statement mean it will set the first two arguments and return true
for only one time?
I suppose if the SetValue
appears in the Return
part, it would be more clear.
from fakeit.
You're right,
I think I'll just skip it.
We'll stick to the lambda replacement for now.
Thanks.
On May 9, 2015 7:30 PM, "Binshuo Hu" [email protected] wrote:
···
When(Method(testobject, testfunction).Using(SetValue(value1),
SetValue(value2), _)).Return(true);
···
The Using kinda get me lost. The Using part ought to work with matchers,
since they are conditions declared by the When. But here setters rather
than matchers are used, I simply coudn't comprehend the intention of this
statement. Does this statement mean it will set the first two arguments and
return true for only one time?I suppose if the SetValue appears in the Return part, it would be more
clear.—
Reply to this email directly or view it on GitHub
#21 (comment).
from fakeit.
Related Issues (20)
- exception with unique_ptr HOT 13
- Can't mock override with ref-qualifiers? HOT 5
- Colliding MockingContext ids when used in multiple translation units because of __COUNTER__ HOT 7
- Can't stub method with vector of unique_ptr parameter HOT 5
- Clang 14.0.6 compile error HOT 7
- Undefined sanitizer issue HOT 4
- Seems latest version 2.3.1 is not available on conan yet HOT 3
- fakeit from conan center doesn't get header with integration (e.g. header with gtest integration) HOT 5
- Quickstart spy example does not work as expected HOT 2
- Cannot verify 0 times invocations using RepeatedSequence HOT 4
- There are deprecated warnings on OSX with C++20 and C++23 HOT 3
- FakeIt and CppUTest HOT 3
- Verify Using QString gives bad_alloc HOT 2
- Missing .CoReturn method HOT 1
- Not working with local classes? HOT 1
- Stubbing method returning the vector of unique_ptr's generates the compile error. HOT 3
- Spy some dependencies HOT 1
- Comparing invocation history of two different mocks HOT 1
- Add back support for explicit template for *Return(obj).
- Compilation error using Conformance mode in VS2022 HOT 2
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 fakeit.