Однако, кажется, случайным образом приводит к тому, что в некоторых случаях вызывает тест, чтобы завершить все ожидания, даже если все ожидают. Вот минимальная резо, я смог найти: < /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();
}
Если я прокомментирую линию WillByDefault , тест проходит, поскольку фактическая последовательность вызова 1, 2, 1 соответствует ожидаемому. Поскольку не существует неожиданных вызовов, подтвержденных strictmock , то Afaik WillbyDefault никогда не следует вызывать. Если я изменю действие по умолчанию, на то, что он не обращается к тому подобному [] (auto) {printf ("unmanceed \ n"); } , затем тестируется проходы, но печатает сообщение 3 раза, сбивая меня с толку.
Что -то я делаю неправильно?>
Подробнее здесь: https://stackoverflow.com/questions/796 ... xpect-call
Мобильная версия