Je veux définir pour une méthode mockée le comportement que lorsqu'elle est appelée dans un test, tous les EXPECTED_CALL
et ON_CALL
spécifiques pour ce test sont en cours de vérification, mais toujours la méthode originale est en cours d'exécution après cela.Comment faire correctement des méthodes fictives appelez la méthode virtuelle originale
1
A
Répondre
1
Vous pouvez accomplir cela en utilisant la technique déléguant à réel, comme par Google Mock documentation:
Vous pouvez utiliser la technique à réelle déléguant pour vous assurer que votre maquette a le même comportement que le réel objet tout en conservant la possibilité de valider les appels. Voici un exemple:
using ::testing::_;
using ::testing::AtLeast;
using ::testing::Invoke;
class MockFoo : public Foo {
public:
MockFoo() {
// By default, all calls are delegated to the real object.
ON_CALL(*this, DoThis())
.WillByDefault(Invoke(&real_, &Foo::DoThis));
ON_CALL(*this, DoThat(_))
.WillByDefault(Invoke(&real_, &Foo::DoThat));
...
}
MOCK_METHOD0(DoThis, ...);
MOCK_METHOD1(DoThat, ...);
...
private:
Foo real_;
};
...
MockFoo mock;
EXPECT_CALL(mock, DoThis())
.Times(3);
EXPECT_CALL(mock, DoThat("Hi"))
.Times(AtLeast(1));
... use mock in test ...