web-dev-qa-db-fra.com

google mock - puis-je appeler plusieurs fois EXPECT_CALL sur le même objet simulé?

Si j'appelle EXPECT_CALL deux fois sur le même faux objet dans le même TEST_F. . . ce qui se produit?

Les attentes sont-elles ajoutées à l'objet simulé ou le deuxième appel efface-t-il les effets du premier appel?

J'ai trouvé The After Clause qui semble impliquer que plusieurs appels vers le même mock + EXPECT_CALL sont autorisés.

11
Bob

De ForDummies :

Par défaut, lorsqu'une méthode fictive est invoquée, Google Mock recherchera les attentes dans l'ordre inverse de leur définition, et s'arrêtera lorsqu'une attente active qui correspond aux arguments est trouvée (vous pouvez la considérer comme "des règles plus récentes remplacent les plus anciennes. ").

Dans le fichier suivant, le test TheSameArgumentsGoingToFail échouera car la deuxième attente sera mise en correspondance deux fois et la première ne sera pas du tout mise en correspondance. Notez que le test "DifferentArgumentsGoingToBeOk" passera.

#include <gmock/gmock.h>

using namespace ::testing;

struct SomeMock
{
    MOCK_CONST_METHOD1(foo, void(int));
};

TEST(Examples, TheSameArgumentsGoingToFail)
{
    SomeMock mock;

    EXPECT_CALL(mock, foo(4));
    EXPECT_CALL(mock, foo(4));

    mock.foo(4);
    mock.foo(4);
}

TEST(Examples, DifferentArgumentsGoingToBeOk)
{
    SomeMock mock;

    EXPECT_CALL(mock, foo(4));
    EXPECT_CALL(mock, foo(5));

    mock.foo(4);
    mock.foo(5);
}

Vous pouvez utiliser un certain nombre de techniques si vous souhaitez créer plusieurs attentes avec les mêmes paramètres ( tilisation InSequence , RetiresOnSaturation ). Ce n'est pas nécessaire très souvent.

6
luantkow