google测试中测试夹具有什么用?

What is the use of a test fixture in google test?

Google 建议尽可能使用文本夹具 constructor/destructor 而不是 SetUp()/TearDown() (https://google.github.io/googletest/faq.html#CtorVsSetUp)。假设我这样做,即使使用测试夹具有什么用?下面的有什么不同,第一个的优点是什么?

TEST_F(MyFixture, MyTest) {
  ... run test, using member functions of MyFixture for common code ...
}

TEST(MySuite, MyTest) {
  MyFixture fixture; // will call ctor
  ... run test, using public functions of MyFixture for common code ...
} // will call dtor

多于一个时优势可见TEST/TEST_F。 比较:

TEST(MyTest, shallX)
{ 
   MyTest test;
   test.setUpX();
   test.objectUnderTest.doX();
}

TEST(MyTest, shallY)
{
   OtherTest test;
   test.setUpY();
   test.objectUnderTest.doY();
}

TEST_F(MyTest, shallX)
{ 
   setUpX();
   objectUnderTest.doX();
}

TEST_F(MyTest, shallY)
{
   setUpY();
   objectUnderTest.doY();
}

我们可以看到的是:

  1. 遵循 DRY(不要重复自己)原则。您不必重复创建一些测试助手对象。在 TEST_F - 宏创建此实例。
  2. TEST_F 代码更安全。请参阅 MyTest..shallDoY——您是否发现使用了错误的测试助手对象,而不是 testname 所希望的对象。

因此,如果您的测试需要一些测试助手 class,最好使用 TEST_F。 如果不是 - 然后使用测试。