如何将参数传递给gtest

时间:2022-10-07 15:15:54

How can I pass parameter to my test suites?

如何将参数传递给我的测试套件?

gtest --number-of-input=5

I have the following main gtest code. And --number-of-input=5 should be passed to InitGoogleTest().

我有以下主要的gtest代码。并且--number-of-input = 5应传递给InitGoogleTest()。

#include <iostream>
#include <gtest/gtest.h>

int main(int argc, char **argv) {
  std::cout << "Running main() from gtest_main.cc\n";
  ::testing::GTEST_FLAG(output) = "xml:hello.xml";
  testing::InitGoogleTest(&argc, argv);

  return RUN_ALL_TESTS();
}

I don't know how to pass my parameter to the test suites/cases as follows?

我不知道如何将我的参数传递给测试套件/案例如下?

class TestTwo : public QuickTest {
 protected:
  virtual void SetUp() {
      QuickTest::SetUp();
      square = new Square(10);
      circle = new Circle(10);

  }

  virtual void TearDown() {
      delete square;
      delete circle;
      QuickTest::TearDown();
  }

  Square* square;
  Circle* circle;
};


// Now, let's write tests using the QueueTest fixture.

// Tests the default constructor.
TEST_F(TestOne, DefaultConstructor) {
  EXPECT_EQ(100.0, square->area());
}
TEST_F(TestOne, DefaultDestructor) {
  EXPECT_EQ(1,1);
}
TEST_F(TestOne, VHDL_EMIT_Passthrough) {
  EXPECT_EQ(1,1);
}
TEST_F(TestOne, VHDL_BUILD_Passthrough) {
  EXPECT_EQ(1,1);
}

Added

I modified the main method to show the argv[i] after InitGoogleTest().

我修改了main方法,以在InitGoogleTest()之后显示argv [i]。

int main(int argc, char **argv) {
    std::cout << "Running main() from gtest_main.cc\n";
    ::testing::GTEST_FLAG(output) = "xml:hello.xml";
    testing::InitGoogleTest(&argc, argv);

    for (int i = 0; i < argc; i++) {
        cout << i << ":" << argv[i] << endl;
    }

This is the arguments given to the gtest: ./s --number-of-input=5 --gtest_filter=Test_Cases1*.

这是给gtest的参数:./ s --number-of-input = 5 --gtest_filter = Test_Cases1 *。

This is the results:

这是结果:

Running main() from gtest_main.cc
0:./s
1:--number-of-input=5
Note: Google Test filter = Test_Cases1*
[==========] Running 0 tests from 0 test cases.
[==========] 0 tests from 0 test cases ran. (0 ms total)
[  PASSED  ] 0 tests.

gtest filters out the tests that does not have the name of Test_Cases1, and it also shows the correct arguments other than those start with gtest.

gtest过滤掉了没有Test_Cases1名称的测试,它还显示了除gtest之外的正确参数。

Reference - How to run specific test cases in GoogleTest

参考 - 如何在GoogleTest中运行特定的测试用例

1 个解决方案

#1


38  

Google Test only recognizes its own command-line options. Each time it finds one, it removes it from argv and updates argc accordingly, so after InitGoogleTest returns, anything left over in argv is available for you to process yourself. Use your favorite command-line-parsing technique, store the results in some global variable, and refer to it during your tests.

Google Test仅识别自己的命令行选项。每次找到一个,它都会从argv中删除它并相应地更新argc,因此在InitGoogleTest返回后,argv中剩下的任何内容都可供您自行处理。使用您最喜欢的命令行解析技术,将结果存储在某个全局变量中,并在测试期间引用它。

If a command-line options looks like a Google Test option but really isn't, then the program will print its help message and exit without running any tests. Google Test options start with gtest_.

如果命令行选项看起来像Google Test选项但实际上不是,那么程序将打印其帮助消息并退出而不运行任何测试。 Google测试选项以gtest_开头。

#1


38  

Google Test only recognizes its own command-line options. Each time it finds one, it removes it from argv and updates argc accordingly, so after InitGoogleTest returns, anything left over in argv is available for you to process yourself. Use your favorite command-line-parsing technique, store the results in some global variable, and refer to it during your tests.

Google Test仅识别自己的命令行选项。每次找到一个,它都会从argv中删除它并相应地更新argc,因此在InitGoogleTest返回后,argv中剩下的任何内容都可供您自行处理。使用您最喜欢的命令行解析技术,将结果存储在某个全局变量中,并在测试期间引用它。

If a command-line options looks like a Google Test option but really isn't, then the program will print its help message and exit without running any tests. Google Test options start with gtest_.

如果命令行选项看起来像Google Test选项但实际上不是,那么程序将打印其帮助消息并退出而不运行任何测试。 Google测试选项以gtest_开头。