У меня есть класс С++, который я пытаюсь протестировать с помощью GMock. У меня есть следующий фиктивный класс:
class MyTestMock
{
public:
MOCK_METHOD1(myCoolMethod, int(const char*));
MOCK_METHOD1(myCoolMethod, int(string));
}
Затем в моем тесте происходит следующее:
MyTestMock myMock;
if ( myMock.myCoolMethod("stuff") )
{
// Stuff I don't care about, don't want to execute
}
if ( myMock.myCoolMethod("moarStuff") )
{
// More stuff I don't care about, don't want to execute
}
if ( myMock.myCoolMethod("foo") )
{
// This I care about and want to execute
}
Что я хотел бы сделать, так это позволить первым двум вызовам быть неинтересными вызовами, которые возвращают значение по умолчанию для целых чисел, 0, в то время как я установил конкретное ожидание для третьего вызова, чтобы он возвращал 1. Это была моя попытка сделать это:
EXPECT_CALL(myMock, myCoolMethod(TypedEq<const char *>("foo"))).WillOnce(Return(1));
Однако это приводит к провалу теста. Если я сделаю это вместо этого:
EXPECT_CALL(myMock, myCoolMethod(Matcher<const char *>(_))).WillRepeatedly(Return(0));
EXPECT_CALL(myMock, myCoolMethod(TypedEq<const char *>("foo"))).WillOnce(Return(1));
мой тест проходит нормально. Я пытаюсь сделать модульное тестирование как можно более безболезненным на старой массивной кодовой базе монолитного стиля, поэтому мне бы очень хотелось, чтобы дополнительная волшебная строка не требовала возврата значения по умолчанию. Любые идеи о том, как я могу сделать это только с одним ожиданием, не проваливая тест?