use*_*929 10 unit-testing googlemock
目前,我正在学习单元测试谷歌假装什么是平时使用virtual void SetUp(),并virtual void TearDown()在谷歌模仿?使用代码的示例场景将是好的.提前致谢.
pht*_*ier 12
它是在每个测试的开始和结束时对您想要执行的代码进行分解,以避免重复它.
例如 :
namespace {
class FooTest : public ::testing::Test {
protected:
Foo * pFoo_;
FooTest() {
}
virtual ~FooTest() {
}
virtual void SetUp() {
pFoo_ = new Foo();
}
virtual void TearDown() {
delete pFoo_;
}
};
TEST_F(FooTest, CanDoBar) {
// You can assume that the code in SetUp has been executed
// pFoo_->bar(...)
// The code in TearDown will be run after the end of this test
}
TEST_F(FooTest, CanDoBaz) {
// The code from SetUp will have been executed *again*
// pFoo_->baz(...)
// The code in TearDown will be run *again* after the end of this test
}
} // Namespace
Run Code Online (Sandbox Code Playgroud)
测试代码有充满代码重复的倾向:编写单独的测试方法来测试被测代码的不同方面是一种很好的做法。这导致对于某些被测试的功能可能有相当多不同的测试方法。并且,所有这些方法都必须(原则上)实现以下步骤:
由于这些活动对所有测试方法都是通用的,并且由于每个测试功能有多种测试方法,因此可能存在一定数量的代码重复,特别是在不同的设置和拆除阶段。为了克服这个问题,测试框架提供了将常见的设置和拆卸代码放入特殊方法中的可能性,在谷歌测试设置和拆卸的情况下。
执行模型如下:首先,创建带有测试方法(在 gtest 中也称为夹具)的类的新实例,这意味着调用构造函数。其次,在该实例上运行 SetUp 方法(如果有)。这使设置方法有机会执行不同测试方法之间通用的所有设置活动。第三,调用相应的测试方法(只是其中之一!)。在这里,再次发生设置/练习/验证/拆卸,但关于设置,只有那些尚未被 SetUp 方法覆盖的活动必须完成。同样,只有那些特定于该测试方法的拆卸活动在测试方法内完成。第四,调用 TearDown 方法执行常见的清理活动,最后销毁实例(调用析构函数)。
对于 TearDown 的设置的总体思路就到此为止。然而,在实施测试时需要记住一些事情:当然,SetUp 和 TearDown 可以帮助减少跨测试的代码重复。但是,它们的使用会导致不同类型的问题:
因此,采用不同的方法来减少跨测试方法的代码重复可能是有益的。您可以执行以下操作,而不是将公共代码放入测试框架隐式调用的 SetUp 和 TearDown 中:您创建自己的辅助方法,这些方法具有易于理解的名称,例如“ensureTrafficLightIsGreen”,其中包含相应的公共设置和拆卸代码。这些方法当然不会在每个测试方法之前隐式调用,而是您会显式调用它们。这留下了一些代码重复,但带来的好处是,从测试方法本身可以清楚地知道哪些设置活动实际发生。您自己的辅助方法当然可以带参数,例如“ensureTrafficLightIs(Green)”。