chevron-thin-right chevron-thin-left brand cancel-circle search youtube-icon google-plus-icon linkedin-icon facebook-icon twitter-icon toolbox download check linkedin phone twitter-old google-plus facebook profile-male chat calendar profile-male
0 votes
Is there a way to pass the arguments of a faked method call on to the faked version?

Let\\\'s say I have -

class Factory  {


    int Build(int argument) { return argument; }


 Factory * fake = FAKE<Factory>();

WHEN_CALLED(fake->Build()).DoStaticOrGlobalInstead(<some version that accepts the incoming argument>);

so that when I call fake->Build(10), I can act on the \\\"10\\\" instead of always returning the same value.

Ideally, what I want to do is something like this (obviously this is a contrived example, the real situation is more complex):

WHEN_CALLED(fake->Build()).DoStaticOrGlobalInstead([](int x) { return x*x; });

This functionality - a one-line mocked version of the original class - seems to me sort of central to the concept of mocking - so am I missing something obvious on how to use Typemock to accomplish this?

asked by beauchai (1.1k points)

1 Answer

0 votes

Hey beauchai, 

I am not sure I understood correctly. What do you mean when you say "version"? ("Is there a way to pass the arguments of a faked method call on to the faked version?")

In case you are trying to use DoInstead behavior, you can read it here:

Conditional behavior:

If that's not what you meant and/or you've already tried, please explain in short what are you trying to do and what do you mean by "version".


answered by CoralTypemock (940 points)
So here is the simplest case I can use to explain the request:

class Foo



    int bar(int i) { return i; }


  Foo *f = FAKE<Foo>();

 WHEN_CALLED(f->bar(_)).Return(<an expression derived from the actual value of \"_\" here>);

I want the mock result to depend on the VALUE of the argument that was passed to the member function when the test was run.  I don\'t see any examples where the Return() statement has any means to use the function arguments that were supplied in the test to construct the returned data or object.

Let\'s say I want my FAKE() to return i + 1 instead of i as in the original object.  Is there any reasonable way to accomplish this?