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();
}
我们可以看到的是:
- 遵循 DRY(不要重复自己)原则。您不必重复创建一些测试助手对象。在 TEST_F - 宏创建此实例。
- TEST_F 代码更安全。请参阅
MyTest..shallDoY
——您是否发现使用了错误的测试助手对象,而不是 testname 所希望的对象。
因此,如果您的测试需要一些测试助手 class,最好使用 TEST_F。
如果不是 - 然后使用测试。
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();
}
我们可以看到的是:
- 遵循 DRY(不要重复自己)原则。您不必重复创建一些测试助手对象。在 TEST_F - 宏创建此实例。
- TEST_F 代码更安全。请参阅
MyTest..shallDoY
——您是否发现使用了错误的测试助手对象,而不是 testname 所希望的对象。
因此,如果您的测试需要一些测试助手 class,最好使用 TEST_F。 如果不是 - 然后使用测试。