J'ai une simple classe Mock:argument objet pour se moquer de EXPECT_CALL
class MockCanInterface : public lib::CanInterface {
public:
MockCanInterface() : CanInterface({"mock"}) {}
MOCK_METHOD1(Write, bool(const lib::CanFrame& frame));
MOCK_METHOD1(Read, bool(lib::CanFrame* frame));
};
Dans le code de test, je veux passer un objet à la méthode Write
. Y at-il un moyen de le faire avec la clause .With
? Cela fonctionne avec l'argument passant directement, mais maintenant avec .With
. Le code compile, mais échoue lors de l'exécution - la taille de l'objet est correcte, mais les données ne le sont pas.
Cela fonctionne:
EXPECT_CALL(can_, Write(expected_command_))
.WillOnce(Return(true));
Cela ne signifie pas:
EXPECT_CALL(can_, Write(_))
.With(Args<0>(expected_command_))
.WillOnce(Return(true));
Je reconnais qu'il peut y avoir quelque chose qui manque dans la façon dont le code définit l'objet attendu.
grâce à la solution. Avez-vous essayé le code avec une fausse 'Write' en prenant' const lib :: CanFrame & '? Je continue à obtenir cette erreur 'erreur: en passant « const lib :: CanFrame » comme les rejets « ce » l'argument qualifiers' – ilya1725
vous avez raison. Cela ne fonctionne qu'avec une référence non-const. Je ne peux pas trouver de solution à un argument de référence const. Cependant, je laisse ma réponse ici, peut-être aider quelqu'un à trouver la bonne réponse. – Soeren