Je voudrais déclencher une action etReturn
quelque chose sur .WillRepeatedly()
dans googlemock
.Puis-je retourner et déclencher une action, par ex. incrémenter un compteur avec .WillRepeatedly?
Est-ce que quelqu'un sait comment le faire? (L'écriture est une fonction qui incrémente un paramètre référencé et retourner ce que je veux est la seule option ici?)
Ce sont mes tentatives infructueuses de le faire:
EXPECT_CALL(parser, getTemplateFileName(_))
.WillRepeatedly(Invoke(parser.counter++), Return(TEMPLATE_NAME));
class TemplateParser: public Parser
{
public:
MOCK_METHOD1(getTemplateFileName, std::string(const string& name));
void incrementCounter()
{
++counter;
}
};
// ...
EXPECT_CALL(parser, getTemplateFileName(_))
.WillRepeatedly(Invoke(&parser, &TemplateParser::incrementCounter),
Return(TEMPLATE_NAME));
EDIT:
Afin kerrek mentionné que j'ai essayé:
EXPECT_CALL(parser, getTemplateFileName(_))
.WillRepeatedly(DoAll(
Invoke(&parser, &TemplateParser::incrementCounter),
Return(TEMPLATE_NAME)
)
);
mais je reçois des erreurs comme:
/opt/gmock-1.7.0/include/gmock/gmock-more-actions.h:80: instantiated from ‘Result testing::internal::InvokeMethodAction<Class, MethodPtr>::Perform(const ArgumentTuple&) const [with Result = void, ArgumentTuple = std::tuple<const std::string&>, Class = TemplateParser, MethodPtr = unsigned int (TemplateParser::*)()]’
/opt/gmock-1.7.0/include/gmock/gmock-actions.h:371: instantiated from ‘typename testing::internal::Function<F>::Result testing::PolymorphicAction<Impl>::MonomorphicImpl<F>::Perform(const typename testing::internal::Function<F>::ArgumentTuple&) [with F = void(const std::string&), Impl = testing::internal::InvokeMethodAction<TemplateParser, unsigned int (TemplateParser::*)()>]’
test/src/ParserTest.cpp:315: instantiated from here
/opt/gmock-1.7.0/include/gmock/gmock-generated-actions.h:83: error: too many arguments to function
/opt/gmock-1.7.0/include/gmock/gmock-generated-actions.h:83: error: return-statement with a value, in function returning 'void'
make: *** [test/obj/ParserTest.o] Error 1
'WillRepeatedly (DoAll (...))'? –
Je pensais que cela aiderait, mais s'il vous plaît vérifier mon édition – Patryk
Ah, attendez, «Invoke» ne peut être utilisé pour déléguer à une autre fonction du même type. Ce n'est pas la même chose que "appeler n'importe quel code". Peut-être faire une fonction personnalisée du type correct qui incrémente le compteur, puis appelle le simulacre? 'std :: string myFn (chaîne const & nom) {++ compteur; return getTemplateFileName (nom); } '? Puis juste 'WillRepeatedly (Invoke (..., ... :: myFn))'. –