2017-05-22 3 views
1

Angenommen, Sie dieses:google Mock - speichern EXPECT_CALL dann wiederverwenden und Klauseln ändern

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

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

Ist es möglich, 1) Speichern Sie die Erwartung
UND
2) wiederverwenden es später und die Klauseln ändern?

Von here Ich weiß, es ist möglich, expectations zu speichern, aber es gibt nirgendwo sonst, was darüber hinaus geht.

den obigen Code Bezug genommen, ich will, wie etwas zu tun ist:

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) 

Antwort

1

Nein, ist es nicht möglich, in der Art und Weise in Frage beschrieben ist. Die Expectation-Klasse ist nur in Klausel und nichts anderes zu verwenden - durch Google-Mock-Design können Sie nichts anderes damit tun.

Aber mit dem richtigen Kapselung - Sie könnten das Ziel erreichen, wie:

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

und Verwendung:

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

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

aber ich wette, die Frage als allgemeiner ist gerade dies sehr zu decken Beispiel.

z. Sie können ganze Erwartung kapseln - was auch immer Sie brauchen - wie:

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 = _; 
}; 

und Verwendung:

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

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