Я начинаю с GTest и хочу попробовать параметризованный тест. Чтобы немного поиграть с GTest, я определил класс Foo
, который определяет Foo::returnNumPlus1(const int num) { return num + 1; }
.
. Я хотел бы вызвать эту функцию с перекрестным произведением двух последовательностей с помощью FooTestCombined
.
Мой код:
#include "gtest/gtest.h"
#include "src/lib/foo.hpp"
namespace n
{
namespace
{
// more tests...
class FooTestCombined : public ::testing::TestWithParam<std::tuple<int, int>>
{
protected:
Foo f1;
};
TEST_P(FooTestCombined, DoCombinedTest)
{
int num = std::get<0>(GetParam()) * std::get<1>(GetParam());
std::cout << "called combined with " << num << '\n';
EXPECT_EQ(f1.returnNumPlus1(num), num + 1) << "plus one should work";
}
// calls test with values 2, 4, 6, ..., 20, 40, 60, ..., 200, ..., 1000
INSTANTIATE_TEST_SUITE_P(FirstInstatiation,
FooTestCombined,
testing::Combine(
testing::Range(2, 12, 2),
testing::Values(1, 10, 100)));
// more tests...
} // namespace
} // namespace n
int main(int argc, char **argv)
{
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
Проблема: Тест не выполняется на ./runUnitTests
.
Подсказки:
./runUnitTests --gtest_list_tests
фактически перечисляет тест (ы).
Документация содержит следующий абзац:
INSTANTIATE_TEST_SUITE_P(InstantiationName,
FooTest,
testing::Values("meeny", "miny", "moe"));
ПРИМЕЧАНИЕ. Приведенный выше код должен быть размещен в глобальной области или области имен, а не в области функций.
ПРИМЕЧАНИЕ: не забудьте этот шаг! Если вы сделаете это, ваш тест пройдет в молчании, но ни один из itters в каждой итерации ios никогда не будет запускаться!
По моему мнению, я делаю обе вышеперечисленные вещи. Я не прав?
Редактирование и решение:
Это не было ошибкой в коде. Запуск ./myUnitTests --gtest_shuffle
показал мне все тесты в выводе. Видимо, мой двоичный файл не всегда печатает весь вывод. Это почему?