2017-05-22 2 views
1

Disons que vous avez ceci:google maquette - sauvegarder EXPECT_CALL puis réutiliser et modifier les clauses

EXPECT_CALL(MockClass_obj, f1(55)).Times(1); 
// use the expectation 
// ... 

// Now clear it 
Mock::VerifyAndClear(&MockClass_obj) 

Est-il possible de 1) Enregistrer l'attente
ET
2) réutiliserons plus tard et changer les clauses?

De here Je sais qu'il est possible d'enregistrer expectations mais il n'y a nulle part d'autre qui explique ce que l'on peut faire d'autre.

Se référant au code ci-dessus, je veux faire quelque chose comme:

Expecatation exp1 = EXPECT_CALL(MockClass_obj, f1(55)).Times(1); 
// use the expectation 
// ... 

// Now clear it 
Mock::VerifyAndClear(&MockClass_obj) 

// Somehow modify exp1 to change the cardinality or any of the clauses 
// so that I can make the test immediately readable and convey that it's very much related to the one above": 

// Instead of this: 
EXPECT_CALL(MockClass_obj, f1(55)).Times(0); 

// I wanna do something like 
exp1.Times(0) 

Répondre

1

Non, il est impossible de la manière décrite en question. La classe Expectation est juste à utiliser dans la clause After et rien d'autre - par google-maquette de conception, vous ne pouvez rien faire d'autre avec elle.

Mais, avec l'encapsulation appropriée - vous pourriez atteindre l'objectif, comme:

::testing::Expectation expectF1For55(::testing::Cardinality cardinality) 
{ 
    EXPECT_CALL(MockClass_obj, f1(55)).Times(cardinality); 
} 

Et:

auto exp1 = expectF1For55(Exactly(1)); 
// ... 

// ... 
expectF1For55(Exactly(0)); 

Cependant, je parie que, la question est plus générale que juste pour couvrir ce très Exemple.

E.g. vous pouvez résumer toute attente - tout ce que vous avez besoin - comme:

class F1Expectation 
{ 
public: 
    F1Expectation(MockClass&); 
    Expectation expect(int arg, ::testing::Cardinality cardinality = Exaclty(1)) 
    { 
     m_arg = arg; 
     return EXPECT_CALL(obj, f1(m_arg)).Times(cardinality); 
    } 
    Expectation expect(::testing::Cardinality cardinality) 
    { 
     return EXPECT_CALL(obj, f1(55)).Times(cardinality); 
    } 
private: 
    MockClass& obj; 
    Matcher<int> m_arg = _; 
}; 

Et:

F1Expectation exp1(MockClass_obj); 
exp1.expect(1); 
// ... 

// ... 
exp1.expect(0);