Gmock WillbyDefault запустил, несмотря на совпадение weals_callC++

Программы на C++. Форум разработчиков
Anonymous
Gmock WillbyDefault запустил, несмотря на совпадение weals_call

Сообщение Anonymous »

Я использую WillbyDefault (Testing :: Throw (...)) трюк, чтобы завершить тест на раннем этапе, как описано в https://stackoverflow.com/a/79534623/28945355
Однако, кажется, случайным образом приводит к тому, что в некоторых случаях вызывает тест, чтобы завершить все ожидания, даже если все ожидают. Вот минимальная резо, я смог найти: < /p>

Код: Выделить всё

#include 
#include 

struct foo_mock {
MOCK_METHOD(void, foo, (int a));
};

void do_test(foo_mock& mock) {
mock.foo(1);
mock.foo(2);
mock.foo(1);
}

TEST(foo, test) {
testing::StrictMock mock{};
testing::InSequence seq{};

ON_CALL(mock, foo).WillByDefault(testing::Throw(std::runtime_error{ "unmatched" }));
EXPECT_CALL(mock, foo(1)).RetiresOnSaturation();
EXPECT_CALL(mock, foo(2)).RetiresOnSaturation();
EXPECT_CALL(mock, foo(1)).RetiresOnSaturation();
EXPECT_NO_THROW(do_test(mock));
}

int main(int argc, char **argv) {
testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
Запустите его на Godbolt
Если я прокомментирую линию WillByDefault , тест проходит, поскольку фактическая последовательность вызова 1, 2, 1 соответствует ожидаемому. Поскольку не существует неожиданных вызовов, подтвержденных strictmock , то Afaik WillbyDefault никогда не следует вызывать. Если я изменю действие по умолчанию, на то, что он не обращается к тому подобному [] (auto) {printf ("unmanceed \ n"); } , затем тестируется проходы, но печатает сообщение 3 раза, сбивая меня с толку.
Что -то я делаю неправильно?>

Подробнее здесь: https://stackoverflow.com/questions/796 ... xpect-call

Вернуться в «C++»