SaveArg value used in expect_call

Viewed 175

I have to following mocked functions

DoSomething(const char* par0, const char* par2)
DoSomething2(std::string);

I save the value from DoSomething into

std::string savedPar_;

I want to use it in DoSomething2. How can be done this ?

EXPECT_CALL(mockd_, DoSomething(_, _,))
                .WillOnce(DoAll(SaveArg<1>(&savedPar_), (Return(Ok))));
       
EXPECT_CALL(mockd_, DoSomething2(savedPar_,))
                .WillOnce((Return(Ok)))); 
      // has not yet the val


sut_->work();
// savedPar_ has the value
1 Answers

One way to achieve this is to use SaveArg when DoSomething2 is called and then to compare args saved from DoSomething and DoSomething2

  EXPECT_CALL(mockd_, DoSomething(_, _))
                .WillOnce(DoAll(SaveArg<1>(&savedPar1_), (Return(Ok))));
       
  EXPECT_CALL(mockd_, DoSomething2(_))
                .WillOnce(DoAll(SaveArg<0>(&savedPar2_), (Return(Ok))));

  EXPECT_EQ(savedPar1_, savedPar2_);

Another one is to create a custom matcher that receives a pointer, like this

MATCHER_P(SameAs, value, PrintToString(*value)) { 
  return arg  == *value; 
}

and your expectations would look like this

  EXPECT_CALL(mockd_, DoSomething(_, _))
                .WillOnce(DoAll(SaveArg<1>(&savedPar_), (Return(Ok))));
       
  EXPECT_CALL(mockd_, DoSomething2(SameAs(&savedPar_)))
                .WillOnce((Return(Ok)));
Related