Могу ли я передать параметры в тестовую функцию googletest? - PullRequest
5 голосов
/ 29 февраля 2012

После создания моего тестового файла, xxxxtest, с помощью gtest я могу передать параметр при запуске теста, например, ./xxxxtest 100.Я хочу управлять своей тестовой функцией с помощью параметра, но я не знаю, как использовать пункт в моем тесте. Можете ли вы показать мне образец в тесте?

Ответы [ 2 ]

5 голосов
/ 01 марта 2012

Вы можете сделать что-то вроде следующего:

main.cc

#include <string>
#include "gtest/gtest.h"
#include "my_test.h"

int main(int argc, char **argv) {
  std::string command_line_arg(argc == 2 ? argv[1] : "");
  testing::InitGoogleTest(&argc, argv);
  testing::AddGlobalTestEnvironment(new MyTestEnvironment(command_line_arg));
  return RUN_ALL_TESTS();
}

my_test.h

#include <string>
#include "gtest/gtest.h"

namespace {
std::string g_command_line_arg;
}

class MyTestEnvironment : public testing::Environment {
 public:
  explicit MyTestEnvironment(const std::string &command_line_arg) {
    g_command_line_arg = command_line_arg;
  }
};

TEST(MyTest, command_line_arg_test) {
  ASSERT_FALSE(g_command_line_arg.empty());
}
3 голосов
/ 15 сентября 2014

Вы должны использовать тесты с параметризацией типа.https://github.com/google/googletest/blob/master/googletest/docs/advanced.md#type-parameterized-tests

Параметризованные тесты похожи на типизированные тесты, за исключением того, что они не требуют, чтобы вы знали список типов заранее.Вместо этого вы можете сначала определить тестовую логику, а затем создать ее с помощью списков других типов.Вы даже можете создавать его более одного раза в одной и той же программе.

Если вы разрабатываете интерфейс или концепцию, вы можете определить набор тестов с параметризацией типа, чтобы проверить свойства любой действительной реализации интерфейса / концепции.должен иметь.Затем автор каждой реализации может просто создать экземпляр набора тестов со своим типом, чтобы убедиться, что он соответствует требованиям, без необходимости повторного написания похожих тестов.

Пример

class FooTest: public ::testing::TestWithParam < int >{....};
    TEST_P(FooTest, DoesBar){
        ASSERT_TRUE(foo.DoesBar(GetParam());
    }

INSTANTIATE_TEST_CASE_P(OneToTenRange, FooTest, ::testing::Range(1, 10));
...