GoogleMOCK MOCK MOCKE peut-il les appels à partir d'autres appels de méthode de la même classe?
-
30-10-2019 - |
Question
Est-il possible de se moquer des appels de méthode à partir d'autres appels de méthode de la même classe? Je suis nouveau dans C ++ (principalement un développeur C) et très nouveau dans GoogleMock et Google Test, alors pardonnez-moi si cela est répondu ailleurs et je n'ai pas compris la réponse! Vous trouverez ci-dessous un exemple simple qui devrait expliquer ce que je veux faire. En utilisant l'exemple ci-dessous, je veux me moquer ReturnInput
, pendant les tests ReturnInputPlus1
.
using ::testing::Invoke;
using ::testing::_;
using ::testing::Return;
class MyClass
{
public:
MyClass() : x(1) {}
virtual ~MyClass() {}
int ReturnInput(int x) { return x; }
int ReturnInputPlus1(int x) { return ReturnInput(x) + 1; }
};
class MockMyClass : public MyClass
{
public:
MockMyClass()
{
ON_CALL(*this, ReturnInput(_)).WillByDefault(Invoke(&real, &MyClass::ReturnInput));
ON_CALL(*this, ReturnInputPlus1(_)).WillByDefault(Invoke(&real, &MyClass::ReturnInputPlus1));
}
virtual ~MockMyClass() {}
MOCK_METHOD1(ReturnInput, int(int y));
MOCK_METHOD1(ReturnInputPlus1, int(int));
private:
MyClass real;
};
TEST(MyClassTest, mockUseClassMethod)
{
MockMyClass mock;
EXPECT_CALL(mock, ReturnInput(_))
.WillOnce(Return(2));
EXPECT_CALL(mock, ReturnInputPlus1(_))
.Times(1);
EXPECT_EQ(3, mock.ReturnInputPlus1(1));
}
Lorsque j'exécute le test ci-dessus, je m'attendais à ce que tous les tests réussissent. Au lieu de cela, j'obtiens la sortie suivante:
1>[ RUN ] MyClassTest.mockUseClassMethod
1>.\MyClassTest.cpp(15): error: Value of: mock.ReturnInputPlus1(1)
1> Actual: 2
1>Expected: 3
1>.\DllInfoTest.cpp(10): error: Actual function call count doesn't match EXPECT_CALL(mock, ReturnInput(_))...
1> Expected: to be called once
1> Actual: never called - unsatisfied and active
Pas de solution correcte
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow