测试自动化 2011/06/05 - 1

来源:互联网 发布:c 定义数组 编辑:程序博客网 时间:2024/05/21 10:28

读《玩转gtest》http://www.cnblogs.com/coderzh/archive/2009/04/06/1426755.html

 

0. 杂问

一些关于测试覆盖tool的东东:http://www.cnblogs.com/coderzh/archive/2009/03/21/1418355.html

 

1. 事件:TestCase事件与Test事件

 

总结Test的组织:

* 无特殊事件处理的testcase,使用TEST(testcase-name, test-name)

* 有特殊事件处理的testcase,必须使用TEST_F(testcase-name, test-name)形式,否则,定义的事件将无法被调用

* testcase-name必须和一个特别定义的类(public testing::Test)一致,否则,编译处错如下:

FooTest.cpp:47: 错误:expected class-name before ‘{’ token
FooTest.cpp:47: 警告:‘class MyFooTest_HandleNoneZeroInput_Test’ 有虚函数却没有虚析构函数
FooTest.cpp:47: 错误:‘MyFooTest’ 在此作用域中尚未声明

注:TEST_F将会去使用类定义

 

* 目前MyFooTest.cpp的内容:

[root@localhost frank-study]# cat FooTest.cpp
#include <gtest/gtest.h>
#include "FooEnvironment.cpp"

extern int Foo(int, int);

class MyFooTest : public testing::Test {

protected:
        static void SetUpTestCase() {
                std::cout << "In TestSuite(TestCase) static setup function !" << std::endl;
        }

        static void TearDownTestCase() {
                std::cout << "In TestSuite(TestCase) static  tear down function !" << std::endl;
        }

        virtual void SetUp() {
                std::cout << "In Test(TestCase) setup function !" << std::endl;
        }

        virtual void TearDown() {
                std::cout << "In Test(TestCase) tear down function !" << std::endl;
        }
};


TEST(FooTest, HandleNoneZeroInput) {
        EXPECT_EQ(2, Foo(4,10)) << "Hi!";
        EXPECT_EQ(5, Foo(30,18)) << "Hello! 1";
}

TEST(FooTest2, HandleNoneZeroInput) {
        EXPECT_EQ(2, Foo(4,10));
        EXPECT_EQ(6, Foo(30,18)) << "Hi ther!";
}

TEST(FooTest3, HandleZeroInput) {
        EXPECT_ANY_THROW(Foo(10,0));
        EXPECT_THROW(Foo(0,5), char*);
}


TEST_F(MyFooTest, HandleNoneZeroInput) {
        EXPECT_EQ(2, Foo(4,10)) << "Hi!";
        EXPECT_EQ(5, Foo(30,18)) << "Hello! 1";
        EXPECT_EQ(5, Foo(30,18)) << "Hello! 2";
        EXPECT_EQ(5, Foo(30,18)) << "Hello! 3";
}

TEST_F(MyFooTest, AnotherTest) {
        EXPECT_EQ(2, Foo(4,10)) << "Hi!";
}

GTEST_API_ int main(int argc, char **argv) {
        std::cout << " FRANK: Running main() from gtest_main.cc/n";
        testing::AddGlobalTestEnvironment(new FooEnvironment);
        testing::InitGoogleTest(&argc, argv);
        return RUN_ALL_TESTS();
}

 

 

2. 参数化

 

class IsPrimeParamTest : public::testing::TestWithParam<int>
{

};

 

TEST_P(IsPrimeParamTest, test name)

 

Q:类型参数化,比较复杂的???

 

 

3. 在VC6中搭建gtest-1.6环境

 

让VC6支持*.cc文件:http://hi.baidu.com/wayright/blog/item/286e7cc6873f7a1d9c163d3c.html

 

编译gtestlib.lib失败,估计和compiler对C++语言的新特性识别有关。

 

 

 

原创粉丝点击